標籤:
最近在做一個基於JAVA Servlet的WEB應用以及對應的Anroid應用用戶端的開發工作。
其中,在介面的訪問和資料的傳輸方面使用的比較多的是使用JSON對象來操作格式化資料:在伺服器端採用JSON字串來傳遞資料並在WEB前端或者Android用戶端使用JSON來解析接收到的資料。
首先,在JAVA中使用JSON需要引入 org.json 包(點擊 這裡 可以下載相應的JAR包!), 並在程式中引入相應的JSON類:
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;
其次,在伺服器端的Servlet類中,可以使用如下方法收集資料並產生相應的JSON字串\
//聲明一個Hash對象並添加資料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字串進行解析,在Android用戶端的話,需要使用JSON類來解析字串:
//@description: 根據接收到的JSON字串來解析字串中所包含的資料和資料對象//接收到的JSON字串String result = "[{\"username\": \"your name\", \"user_json\": {\"username\": \"your name\", \"nickname\": \"your nickname\"}}]";//根據字串產生JSON對象JSONArray resultArray = new JSONArray(result);JSONObject resultObj = resultArray.optJSONObject(0);//擷取資料項目String username = resultObj.getString("username");//擷取資料對象JSONObject user = resultObj.getJSONObject("user_json");String nickname = user.getString("nickname");
其實,主要就是涉及到以下集中資料類型之間的轉換:
1. String 轉換為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\"" + "]}"; //轉換成為JSONObject對象 JSONObject jsonObj = new JSONObject(jsonStr); //從JSONObject對象中擷取資料 JavaBean bean = new JavaBean(); //根據屬性名稱擷取int型資料; bean.setId(jsonObj.getInt("id")); //根據屬性名稱擷取String資料; bean.setTitle(jsonObj.getString("title")); //根據屬性名稱擷取JSONObject類 JSONObject config = jsonObj.getJSONObject("config"); bean.setWidth(config.getInt("width")); bean.setHeight(config.getInt("height")); //根據屬性名稱擷取JSONArray數組 JSONArray data = jsonObj.getJSONArray("data"); for(int index = 0, length = data.length(); index < length; index++) { //這裡在org.json.JSONArray對象中居然沒有找到toArray方法,求各位網友給出解決辦法啊!// bean.setLanguages(String[]); } }}class JavaBean{ private int id ; private String title; private int width; private int height; private String[] languages; //這裡省略了設定器和訪問器}
2. JSON對象轉換為String字串
public static void main(String[] args) throws JSONException { //建立JSONObject對象 JSONObject json = new JSONObject(); //向json中添加資料 json.put("username", "wanglihong"); json.put("height", 12.5); json.put("age", 24); //建立JSONArray數組,並將json添加到數組 JSONArray array = new JSONArray(); array.put(json); //轉換為字串 String jsonStr = array.toString(); System.out.println(jsonStr); }
最終輸出結果為: [{"username":"wanglihong","height":12.5,"age":24}]
3. 集合轉換為JSONArray對象
public static void main(String[] args)throws JSONException{ //初始化ArrayList集合并添加資料 List<String> list = new ArrayList<String>(); list.add("username"); list.add("age"); list.add("sex"); //初始化HashMap集合并添加數組 Map map = new HashMap(); map.put("bookname", "CSS3實戰"); map.put("price", 69.0); //初始化JSONArray對象,並添加資料 JSONArray array = new JSONArray(); array.put(list); array.put(map); //產生的JSON字串為:[["username","age","sex"],{"price":69,"bookname":"CSS3實戰"}] }
JAVA中使用JSON進行資料傳遞