最近在做一個基於JAVA Servlet的WEB應用以及對應的Anroid應用用戶端的開發工作。
其中,在介面的訪問和資料的傳輸方面使用的比較多的是使用JSON對象來操作格式化資料:在伺服器端採用JSON字串來傳遞資料並在WEB前端或者Android用戶端使用JSON來解析接收到的資料。
首先,在JAVA中使用JSON需要引入 org.json 包(點擊 這裡 可以下載相應的JAR包。), 並在程式中引入相應的JSON類:
1 import org.json.JSONArray;2 import org.json.JSONException;3 import org.json.JSONObject;
其次,在伺服器端的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類來解析字串:
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