JSONObject與JSONArray使用

JSONObject與JSONArray

Java不像PHP解析和生產JSON老是一個比較痛苦的過程。可是使用JSONObject和JSONArray會讓整個過程相對舒服一些。php

JsonObject和JsonArray區別就是JsonObject是對象形式,JsonArray是數組形式html

須要依賴的包:java

commons-lang.jar web

commons-beanutils.jar json

commons-collections.jar 數組

commons-logging.jar  數據結構

ezmorph.jar app

json-lib-2.2.2-jdk15.jaride

生成JSON:

 

[java] view plain copythis

 print?在CODE上查看代碼片派生到個人代碼片

  1. public class Test2 {  
  2.   
  3.     public static void main(String[] args) {  
  4.   
  5.         /* 建立JsonObject第一種方法 */  
  6.         JSONObject jsonObject = new JSONObject();  
  7.         jsonObject.put("UserName", "ZHULI");  
  8.         jsonObject.put("age", "30");  
  9.         jsonObject.put("workIn", "ALI");  
  10.         System.out.println("jsonObject1:" + jsonObject);  
  11.   
  12.         /* 建立JsonObject第二種方法 */  
  13.         HashMap<String, String> hashMap = new HashMap<String, String>();  
  14.         hashMap.put("UserName", "ZHULI");  
  15.         hashMap.put("age", "30");  
  16.         hashMap.put("workIn", "ALI");  
  17.         System.out.println("jsonObject2 FROM HASHMAP:" + JSONObject.fromObject(hashMap));  
  18.   
  19.         /* 建立一個JsonArray方法1 */  
  20.         JSONArray jsonArray = new JSONArray();  
  21.         jsonArray.add(0, "ZHULI");  
  22.         jsonArray.add(1, "30");  
  23.         jsonArray.add(2, "ALI");  
  24.         System.out.println("jsonArray1:" + jsonArray);  
  25.   
  26.         /* 建立JsonArray方法2 */  
  27.         ArrayList<String> arrayList = new ArrayList<String>();  
  28.         arrayList.add("ZHULI");  
  29.         arrayList.add("30");  
  30.         arrayList.add("ALI");  
  31.         System.out.println("jsonArray2 FROM ArrayList:" + JSONArray.fromObject(arrayList));  
  32.   
  33.         /* 若是JSONArray解析一個HashMap,則會將整個對象的放進一個數組的值中 */  
  34.         System.out.println("jsonArray FROM HASHMAP:" + JSONArray.fromObject(hashMap));  
  35.   
  36.         /* 組裝一個複雜的JSONArray */  
  37.         JSONObject jsonObject2 = new JSONObject();  
  38.         jsonObject2.put("UserName", "ZHULI");  
  39.         jsonObject2.put("age", "30");  
  40.         jsonObject2.put("workIn", "ALI");  
  41.         jsonObject2.element("Array", arrayList);  
  42.         jsonObject2.element("Object", jsonObject);  
  43.         System.out.println("jsonObject2:" + jsonObject2);  
  44.   
  45.     }  
  46. }  

 

結果:

 

[html] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. jsonObject1:{"workIn":"ALI","age":"30","UserName":"ZHULI"}  
  2. jsonObject2 FROM HASHMAP:{"workIn":"ALI","age":"30","UserName":"ZHULI"}  
  3. jsonArray1:["ZHULI","30","ALI"]  
  4. jsonArray2 FROM ArrayList:["ZHULI","30","ALI"]  
  5. jsonArray FROM HASHMAP:[{"workIn":"ALI","age":"30","UserName":"ZHULI"}]  
  6. jsonObject2:{"workIn":"ALI","age":"30","Array":["ZHULI","30","ALI"],"UserName":"ZHULI","Object":{"workIn":"ALI","age":"30","UserName":"ZHULI"}  

 

解析JSON:

 

[html] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. package com.xxx.video.resource.controller.web;  
  2.   
  3. import net.sf.json.JSONArray;  
  4. import net.sf.json.JSONObject;  
  5.   
  6.   
  7. public class Test {  
  8.   
  9.     public static void main(String[] args) {  
  10.   
  11.         String jsonString = "{\"UserName\":\"ZHULI\",\"age\":\"30\",\"workIn\":\"ALI\",\"Array\":[\"ZHULI\",\"30\",\"ALI\"]}";  
  12.         /* 將Json字符串轉爲java對象 */  
  13.         JSONObject obj = JSONObject.fromObject(jsonString);  
  14.   
  15.         /* 獲取Object中的UserName */  
  16.         if (obj.has("UserName")) {  
  17.             System.out.println("UserName:" + obj.getString("UserName"));  
  18.         }  
  19.   
  20.         /* 獲取ArrayObject */  
  21.         if (obj.has("Array")) {  
  22.             JSONArray transitListArray = obj.getJSONArray("Array");  
  23.             for (int i = 0; i < transitListArray.size(); i++) {  
  24.                 System.out.print("Array:" + transitListArray.getString(i) + " ");  
  25.             }  
  26.         }  
  27.     }  
  28. }  


返回:

 

 

[html] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. UserName:ZHULI  
  2. Array:ZHULI Array:30 Array:ALI   

 

對象遍歷

[java] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. if (!obj.isNull("sku")) {  
  2.     HashMap<String, String> skuMap = new HashMap<String, String>();  
  3.     JSONObject skuObject = obj.getJSONObject("sku");  
  4.     Iterator<String> keys = skuObject.keys();  
  5.     String key;  
  6.     Object o;  
  7.     while (keys.hasNext()) {  
  8.         key = keys.next();  
  9.         o = skuObject.get(key);  
  10.         skuMap.put(key, String.valueOf(o));  
  11.     }  
  12. }  

 

gson使用

gson和其餘現有Java json類庫最大的不一樣時gson須要序列化得實體類不須要使用annotation來標識須要序列化得字段,同時gson又能夠經過使用annotation來靈活配置須要序列化的字段。

生成JOSN

 

[java] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. public class Test2 {  
  2.   
  3.     public static void main(String[] args) {  
  4.         Gson gson = new Gson();  
  5.   
  6.         HashMap<String, String> map = new HashMap<String, String>(); //實例化一個hashmap    
  7.         map.put("username", "initphp"); //新增一個數據    
  8.         map.put("password", "test");  
  9.         map.put("age", "100");  
  10.         String mapToJson = gson.toJson(map);  
  11.         System.out.println(mapToJson);  
  12.     }  
  13.   
  14. }  


結果:

 

 

[java] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. {"username":"initphp","age":"100","password":"test"}  

 

 

 

第二種,有肯定的數據結構

有一個person的類了

[java] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. publicclass Person {  
  2.   
  3. private String name;  
  4. privateint age;  
  5.   
  6. /** 
  7. @return the name 
  8. */  
  9. public String getName() {  
  10. return name;  
  11. }  
  12.   
  13. /** 
  14. @param name the name to set 
  15. */  
  16. publicvoid setName(String name) {  
  17. this.name = name;  
  18. }  
  19.   
  20. /** 
  21. @return the age 
  22. */  
  23. publicint getAge() {  
  24. return age;  
  25. }  
  26.   
  27. /** 
  28. @param age the age to set 
  29. */  
  30. publicvoid setAge(int age) {  
  31. this.age = age;  
  32. }  
  33.   
  34. @Override  
  35. public String toString()  
  36. {  
  37. return name +":"+age;  
  38. }  
  39. }  

 

[java] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. public class Test2 {  
  2.   
  3.     public static void main(String[] args) {  
  4.         Gson gson = new Gson();  
  5.   
  6.         List<Person> persons = new ArrayList<Person>();  
  7.         for (int i = 0; i < 10; i++) {  
  8.             Person p = new Person();  
  9.             p.setName("name" + i);  
  10.             p.setAge(i * 5);  
  11.             persons.add(p);  
  12.         }  
  13.         String str = gson.toJson(persons);  
  14.     }  
  15. }  


結果:

[html] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. [{"name":"name0","age":0},{"name":"name1","age":5},{"name":"name2","age":10},{"name":"name3","age":15},{"name":"name4","age":20},{"name":"name5","age":25},{"name":"name6","age":30},{"name":"name7","age":35},{"name":"name8","age":40},{"name":"name9","age":45}]  

 

 

解析JSON

 

JSON字符串轉對象稍微複雜點。分多種狀況。

第一種,咱們沒法肯定JSON裏面的數據結構,可是能判斷這個JSON是一維的結構,咱們能夠用HashMap來裝載這個數據。

 

[java] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. public class Test2 {  
  2.   
  3.     public static void main(String[] args) {  
  4.         Gson gson = new Gson();  
  5.   
  6.         String hashString = "{\"username\":\"initphp\", \"age\":\"100\"}";  
  7.         HashMap<String, String> map = gson.fromJson(hashString,  
  8.                 new TypeToken<HashMap<String, String>>() {  
  9.                 }.getType());  
  10.         System.out.print(map.get("age"));  
  11.     }  
  12. }  

 

 

第二種,有肯定的數據結構:

[java] view plain copy

 print?在CODE上查看代碼片派生到個人代碼片

  1. Person person = gson.fromJson(str, Person.class);  
相關文章
相關標籤/搜索