JAVA中使用JSON進(jìn)行數(shù)據(jù)傳遞示例
最近在做一個基于JAVA Servlet的WEB應(yīng)用以及對應(yīng)的Anroid應(yīng)用客戶端的開發(fā)工作。
其中,在接口的訪問和數(shù)據(jù)的傳輸方面使用的比較多的是使用JSON對象來操作格式化數(shù)據(jù):在服務(wù)器端采用JSON字符串來傳遞數(shù)據(jù)并在WEB前端或者Android客戶端使用JSON來解析接收到的數(shù)據(jù)。
首先,在JAVA中使用JSON需要引入 org.json 包, 并在程序中引入相應(yīng)的JSON類:
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;
其次,在服務(wù)器端的Servlet類中,可以使用如下方法收集數(shù)據(jù)并生成相應(yīng)的JSON字符串
//聲明一個Hash對象并添加數(shù)據(jù) Map params = new HashMap(); params.put("username", username); params.put("user_json", user); //聲明JSONArray對象并輸入JSON字符串 JSONArray array = JSONArray.fromObject(params); put.println(array.toString());
在WEB前端可以通過javascript直接對JSON字符串進(jìn)行解析,在Android客戶端的話,需要使用JSON類來解析字符串:
//@description: 根據(jù)接收到的JSON字符串來解析字符串中所包含的數(shù)據(jù)和數(shù)據(jù)對象 //接收到的JSON字符串 String result = "[{\"username\": \"your name\", \"user_json\": {\"username\": \"your name\", \"nickname\": \"your nickname\"}}]"; //根據(jù)字符串生成JSON對象 JSONArray resultArray = new JSONArray(result); JSONObject resultObj = resultArray.optJSONObject(0); //獲取數(shù)據(jù)項 String username = resultObj.getString("username"); //獲取數(shù)據(jù)對象 JSONObject user = resultObj.getJSONObject("user_json"); String nickname = user.getString("nickname");
其實(shí),主要就是涉及到以下集中數(shù)據(jù)類型之間的轉(zhuǎn)換:
1. String 轉(zhuǎn)換為JSON對象
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; //別忘了添加上JSON包哦! public class StringToJSON { public static void main(String[] args) throws JSONException{ System.out.println("abc"); //定義JSON字符串 String jsonStr = "{\"id\": 2," + " \"title\": \"json title\", " + "\"config\": {" + "\"width\": 34," + "\"height\": 35," + "}, \"data\": [" + "\"JAVA\", \"JavaScript\", \"PHP\"" + "]}"; //轉(zhuǎn)換成為JSONObject對象 JSONObject jsonObj = new JSONObject(jsonStr); //從JSONObject對象中獲取數(shù)據(jù) JavaBean bean = new JavaBean(); //根據(jù)屬性名稱獲取int型數(shù)據(jù); bean.setId(jsonObj.getInt("id")); //根據(jù)屬性名獲取String數(shù)據(jù); bean.setTitle(jsonObj.getString("title")); //根據(jù)屬性名獲取JSONObject類 JSONObject config = jsonObj.getJSONObject("config"); bean.setWidth(config.getInt("width")); bean.setHeight(config.getInt("height")); //根據(jù)屬性名獲取JSONArray數(shù)組 JSONArray data = jsonObj.getJSONArray("data"); for(int index = 0, length = data.length(); index < length; index++) { //這里在org.json.JSONArray對象中居然沒有找到toArray方法,求各位網(wǎng)友給出解決辦法??! // bean.setLanguages(String[]); } } } class JavaBean{ private int id ; private String title; private int width; private int height; private String[] languages; //這里省略了設(shè)置器和訪問器 }
2. JSON對象轉(zhuǎn)換為String字符串
public static void main(String[] args) throws JSONException { //創(chuàng)建JSONObject對象 JSONObject json = new JSONObject(); //向json中添加數(shù)據(jù) json.put("username", "wanglihong"); json.put("height", 12.5); json.put("age", 24); //創(chuàng)建JSONArray數(shù)組,并將json添加到數(shù)組 JSONArray array = new JSONArray(); array.put(json); //轉(zhuǎn)換為字符串 String jsonStr = array.toString(); System.out.println(jsonStr); }
最終輸出結(jié)果為: [{"username":"wanglihong","height":12.5,"age":24}]
3. 集合轉(zhuǎn)換為JSONArray對象
public static void main(String[] args)throws JSONException{ //初始化ArrayList集合并添加數(shù)據(jù) List<String> list = new ArrayList<String>(); list.add("username"); list.add("age"); list.add("sex"); //初始化HashMap集合并添加數(shù)組 Map map = new HashMap(); map.put("bookname", "CSS3實(shí)戰(zhàn)"); map.put("price", 69.0); //初始化JSONArray對象,并添加數(shù)據(jù) JSONArray array = new JSONArray(); array.put(list); array.put(map); //生成的JSON字符串為:[["username","age","sex"],{"price":69,"bookname":"CSS3實(shí)戰(zhàn)"}] }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中BigDecimal比較大小的3種方法(??compareTo()、??equals()??和??compar
這篇文章主要給大家介紹了關(guān)于Java中BigDecimal比較大小的3種方法,方法分別是??compareTo()、??equals()??和??compareTo()??,在Java中使用BigDecimal類來進(jìn)行精確的數(shù)值計算,需要的朋友可以參考下2023-11-11SpringBoot整合mybatis-generator插件流程詳細(xì)講解
這篇文章主要介紹了SpringBoot整合mybatis-generator插件流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-02-02Springboot+Mybatis實(shí)現(xiàn)分頁加條件查詢功能
這篇文章主要為大家詳細(xì)介紹了Springboot+Mybatis實(shí)現(xiàn)分頁加條件查詢,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04詳解SpringBoot中的統(tǒng)一功能處理的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何實(shí)現(xiàn)統(tǒng)一功能處理,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定借鑒價值,需要的可以參考一下2023-01-01Springboot實(shí)現(xiàn)Java阿里短信發(fā)送代碼實(shí)例
這篇文章主要介紹了springboot實(shí)現(xiàn)Java阿里短信發(fā)送代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02