JSONObject与JSONArray

JSONObject与JSONArray

Java不像PHP解析和生产JSON总是一个比较痛苦的过程。但是使用JSONObject和JSONArray会让整个过程相对舒服一些。

JsonObject和JsonArray区别就是JsonObject是对象形式,JsonArray是数组形式

需要依赖的包:

commons-lang.jar 

commons-beanutils.jar 

commons-collections.jar 

commons-logging.jar  

ezmorph.jar 

json-lib-2.2.2-jdk15.jar

生成JSON:

[java]  view plain  copy
 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);  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值