JAVA中使用JSON進行資料傳遞
阿新 • • 發佈:2019-02-04
最近在做一個基於JAVA Servlet的WEB應用以及對應的Anroid應用客戶端的開發工作。
其中,在介面的訪問和資料的傳輸方面使用的比較多的是使用JSON物件來操作格式化資料:在伺服器端採用JSON字串來傳遞資料並在WEB前端或者Android客戶端使用JSON來解析接收到的資料。
傳送:
接收: servlet得到一個ArrayList<T>,將其轉化為jsonArray物件(json物件是指的是jsonarray還是jsonobject??)放進response裡面,返回給前端頁面,獲取的方法有jquery、javascript或jstl標籤等方法
js方法:js中可用
servlet將json封裝並返回一個json物件的程式碼
response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); JSONObject json=new JSONObject(); //json給值省略 response.getWriter().println(json.toString());
首先,在JAVA中使用JSON需要引入 org.json 包(點選 這裡 可以下載相應的JAR包!),
並在程式中引入相應的JSON類:
1 import org.json.JSONArray; 2 import org.json.JSONException; 3 import org.json.JSONObject;
HashMap--JSONArray--輸出???
其次,在伺服器端的Servlet類中,可以使用如下方法收集資料並生成相應的JSON字串
1 //宣告一個Hash物件並新增資料 2 Map params = new HashMap(); 3 4 params.put("username", username);5 params.put("user_json", user); 6 7 //宣告JSONArray物件並輸入JSON字串 8 JSONArray array = JSONArray.fromObject(params); 9 put.println(array.toString());
在WEB前端可以通過javascript直接對JSON字串進行解析,在Android客戶端的話,需要使用JSON類來解析字串:
JSON字串--JSONArray--JSONObject——獲取資料項或資料物件
1 //@description: 根據接收到的JSON字串來解析字串中所包含的資料和資料物件 2 3 //接收到的JSON字串 4 String result = "[{\"username\": \"your name\", \"user_json\": {\"username\": \"your name\", \"nickname\": \"your nickname\"}}]"; 5 6 //根據字串生成JSON物件 7 JSONArray resultArray = new JSONArray(result); 8 JSONObject resultObj = resultArray.optJSONObject(0); 9 10 //獲取資料項 11 String username = resultObj.getString("username"); 12 13 //獲取資料物件 14 JSONObject user = resultObj.getJSONObject("user_json"); 15 String nickname = user.getString("nickname");
其實,主要就是涉及到以下集中資料型別之間的轉換:
1. String 轉換為JSON物件
1 import org.json.JSONArray; 2 import org.json.JSONException; 3 import org.json.JSONObject; 4 5 //別忘了新增上JSON包哦! 6 public class StringToJSON { 7 public static void main(String[] args) throws JSONException{ 8 9 System.out.println("abc"); 10 //定義JSON字串 11 String jsonStr = "{\"id\": 2," + 12 " \"title\": \"json title\", " + 13 "\"config\": {" + 14 "\"width\": 34," + 15 "\"height\": 35," + 16 "}, \"data\": [" + 17 "\"JAVA\", \"JavaScript\", \"PHP\"" + 18 "]}"; 19 20 //轉換成為JSONObject物件 21 JSONObject jsonObj = new JSONObject(jsonStr); 22 23 //從JSONObject物件中獲取資料 24 JavaBean bean = new JavaBean(); 25 26 //根據屬性名稱獲取int型資料; 27 bean.setId(jsonObj.getInt("id")); 28 29 //根據屬性名獲取String資料; 30 bean.setTitle(jsonObj.getString("title")); 31 32 //根據屬性名獲取JSONObject類 33 JSONObject config = jsonObj.getJSONObject("config"); 34 bean.setWidth(config.getInt("width")); 35 bean.setHeight(config.getInt("height")); 36 37 //根據屬性名獲取JSONArray陣列 38 JSONArray data = jsonObj.getJSONArray("data"); 39 for(int index = 0, length = data.length(); index < length; index++) { 40 //這裡在org.json.JSONArray物件中居然沒有找到toArray方法,求各位網友給出解決辦法啊! 41 // bean.setLanguages(String[]); 42 } 43 } 44 } 45 46 class JavaBean{ 47 private int id ; 48 private String title; 49 private int width; 50 private int height; 51 private String[] languages; 52 53 //這裡省略了設定器和訪問器 54 }
2. JSON物件轉換為String字串
1 public static void main(String[] args) throws JSONException { 2 3 //建立JSONObject物件 4 JSONObject json = new JSONObject(); 5 6 //向json中新增資料 7 json.put("username", "wanglihong"); 8 json.put("height", 12.5); 9 json.put("age", 24); 10 11 //建立JSONArray陣列,並將json新增到陣列 12 JSONArray array = new JSONArray(); 13 array.put(json); 14 15 //轉換為字串 16 String jsonStr = array.toString(); 17 18 System.out.println(jsonStr); 19 }
最終輸出結果為: [{"username":"wanglihong","height":12.5,"age":24}]
3. 集合轉換為JSONArray物件
1 public static void main(String[] args)throws JSONException{ 2 //初始化ArrayList集合並新增資料 3 List<String> list = new ArrayList<String>(); 4 list.add("username"); 5 list.add("age"); 6 list.add("sex"); 7 8 //初始化HashMap集合並新增陣列 9 Map map = new HashMap(); 10 map.put("bookname", "CSS3實戰"); 11 map.put("price", 69.0); 12 13 //初始化JSONArray物件,並新增資料 14 JSONArray array = new JSONArray(); 15 array.put(list); 16 array.put(map); 17 18 //生成的JSON字串為:[["username","age","sex"],{"price":69,"bookname":"CSS3實戰"}] 19 }