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,都很好用,推荐给大家使用!     

你可能感兴趣的:(java)