Java构造和解析Json数据的两种方法详解一

  在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。

      用org.son构造和解析Json数据的方法详解请参见我下一篇博文:Java构造和解析Json数据的两种方法详解二

一、介绍

      JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json数据,在其官网http://www.json.org/上有详细讲解,有兴趣的可以去研究。

二、下载jar依赖包:可以去这里下载

三、基本方法介绍

1. List集合转换成json方法

 1 1. List集合转换成json方法
 2 
 3  
 4 
 5 List list = new ArrayList();
 6 list.add( "first" );
 7 list.add( "second" );
 8 JSONArray jsonArray2 = JSONArray.fromObject( list );
 9  
10 
11 2. Map集合转换成json方法
12 14 Map map = new HashMap();
15 map.put("name", "json");
16 map.put("bool", Boolean.TRUE);
17 map.put("int", new Integer(1));
18 map.put("arr", new String[] { "a", "b" });
19 map.put("func", "function(i){ return this.arr[i]; }");
20 JSONObject json = JSONObject.fromObject(map);
21 复制代码
22 3. Bean转换成json代码
23
24 JSONObject jsonObject = JSONObject.fromObject(new JsonBean());
25 4. 数组转换成json代码
26 
27 boolean[] boolArray = new boolean[] { true, false, true };
28 JSONArray jsonArray1 = JSONArray.fromObject(boolArray);
29 5. 一般数据转换成json代码
30 
31 JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']" );
32 6. beans转换成json代码
33 
35 List list = new ArrayList();
36 JsonBean2 jb1 = new JsonBean2();
37 jb1.setCol(1);
38 jb1.setRow(1);
39 jb1.setValue("xx");
40 
41 JsonBean2 jb2 = new JsonBean2();
42 jb2.setCol(2);
43 jb2.setRow(2);
44 jb2.setValue("");
45 
46 list.add(jb1);
47 list.add(jb2);
48 JSONArray ja = JSONArray.fromObject(list);

四、演示示例

这里以基本的几个常用方法进行测试

  1 package com.json;
  2 
  3 import java.util.ArrayList;
  4 import java.util.HashMap;
  5 import java.util.List;
  6 import java.util.Map;
  7 
  8 import net.sf.json.JSONArray;
  9 import net.sf.json.JSONObject;
 10 
 11 /**
 12  * 使用json-lib构造和解析Json数据
 13  * 
 14  * @author Alexia
 15  * @date 2013/5/23
 16  *
 17  */
 18 public class JsonTest {
 19 
 20     /**
 21      * 构造Json数据
 22      * 
 23      * @return
 24      */
 25     public static String BuildJson() {
 26 
 27         // JSON格式数据解析对象
 28         JSONObject jo = new JSONObject();
 29 
 30         // 下面构造两个map、一个list和一个Employee对象
 31         Map<String, String> map1 = new HashMap<String, String>();
 32         map1.put("name", "Alexia");
 33         map1.put("sex", "female");
 34         map1.put("age", "23");
 35 
 36         Map<String, String> map2 = new HashMap<String, String>();
 37         map2.put("name", "Edward");
 38         map2.put("sex", "male");
 39         map2.put("age", "24");
 40 
 41         List<Map> list = new ArrayList<Map>();
 42         list.add(map1);
 43         list.add(map2);
 44 
 45         Employee employee = new Employee();
 46         employee.setName("wjl");
 47         employee.setSex("female");
 48         employee.setAge(24);
 49 
 50         // 将Map转换为JSONArray数据
 51         JSONArray ja1 = JSONArray.fromObject(map1);
 52         // 将List转换为JSONArray数据
 53         JSONArray ja2 = JSONArray.fromObject(list);
 54         // 将Bean转换为JSONArray数据
 55         JSONArray ja3 = JSONArray.fromObject(employee);
 56 
 57         System.out.println("JSONArray对象数据格式:");
 58         System.out.println(ja1.toString());
 59         System.out.println(ja2.toString());
 60         System.out.println(ja3.toString());
 61 
 62         // 构造Json数据,包括一个map和一个Employee对象
 63         jo.put("map", ja1);
 64         jo.put("employee", ja2);
 65         System.out.println("\n最终构造的JSON数据格式:");
 66         System.out.println(jo.toString());
 67 
 68         return jo.toString();
 69 
 70     }
 71 
 72     /**
 73      * 解析Json数据
 74      * 
 75      * @param jsonString Json数据字符串
 76      */
 77     public static void ParseJson(String jsonString) {
 78 
 79         // 以employee为例解析,map类似
 80         JSONObject jb = JSONObject.fromObject(jsonString);
 81         JSONArray ja = jb.getJSONArray("employee");
 82 
 83         List<Employee> empList = new ArrayList<Employee>();
 84 
 85         // 循环添加Employee对象(可能有多个)
 86         for (int i = 0; i < ja.size(); i++) {
 87             Employee employee = new Employee();
 88 
 89             employee.setName(ja.getJSONObject(i).getString("name"));
 90             employee.setSex(ja.getJSONObject(i).getString("sex"));
 91             employee.setAge(ja.getJSONObject(i).getInt("age"));
 92 
 93             empList.add(employee);
 94         }
 95 
 96         System.out.println("\n将Json数据转换为Employee对象:");
 97         for (int i = 0; i < empList.size(); i++) {
 98             Employee emp = empList.get(i);
 99             System.out.println("name: " + emp.getName() + " sex: "
100                     + emp.getSex() + " age: " + emp.getAge());
101         }
102 
103     }
104 
105     /**
106      * @param args
107      */
108     public static void main(String[] args) {
109         // TODO Auto-generated method stub
110 
111         ParseJson(BuildJson());
112     }
113 
114 }

运行结果如下

五、与org.json比较

      json-lib和org.json的使用几乎是相同的,我总结出的区别有两点:

      1. org.json比json-lib要轻量得多,前者没有依赖任何其他jar包,而后者要依赖ezmorph和commons的lang、logging、beanutils、collections等组件

      2. json-lib在构造bean和解析bean时比org.json要方便的多,json-lib可直接与bean互相转换,而org.json不能直接与bean相互转换而需要map作为中转,若将bean转为json数据,首先需要先将bean转换为map再将map转为json,比较麻烦。

      总之,还是那句话—适合自己的才是最好的,大家要按需选取使用哪种方法进行解析。最后给大家介绍两款解析Json数据的工具:一是在线工具JSONEdit(http://braincast.nl/samples/jsoneditor/);另一个是Eclipse的插件JSON Tree Analyzer,都很好用,推荐给大家使用!     

posted @ 2015-04-19 15:41  tian830937  阅读(203)  评论(0编辑  收藏  举报