使用Java构造和解析Json数据的两种方法(详解一)
json(javascript object notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,json是 javascript 原生格式,这意味着在 javascript 中处理 json数据不须要任何特殊的 api 或工具包。
在上公布了很多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方法
list list = new arraylist(); list.add( "first" ); list.add( "second" ); jsonarray jsonarray2 = jsonarray.fromobject( list );
2. map集合转换成json方法
map map = new hashmap(); map.put("name", "json"); map.put("bool", boolean.true); map.put("int", new integer(1)); map.put("arr", new string[] { "a", "b" }); map.put("func", "function(i){ return this.arr[i]; }"); jsonobject json = jsonobject.fromobject(map);
3. bean转换成json代码
jsonobject jsonobject = jsonobject.fromobject(new jsonbean());
4. 数组转换成json代码
boolean[] boolarray = new boolean[] { true, false, true }; jsonarray jsonarray1 = jsonarray.fromobject(boolarray);
5. 一般数据转换成json代码
jsonarray jsonarray3 = jsonarray.fromobject("['json','is','easy']" );
6. beans转换成json代码
list list = new arraylist(); jsonbean2 jb1 = new jsonbean2(); jb1.setcol(1); jb1.setrow(1); jb1.setvalue("xx"); jsonbean2 jb2 = new jsonbean2(); jb2.setcol(2); jb2.setrow(2); jb2.setvalue(""); list.add(jb1); list.add(jb2); jsonarray ja = jsonarray.fromobject(list);
四、演示示例
这里以基本的几个常用方法进行测试
package com.json; import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; import net.sf.json.jsonarray; import net.sf.json.jsonobject; /** * 使用json-lib构造和解析json数据 * * @author alexia * @date 2013/5/23 * */ public class jsontest { /** * 构造json数据 * * @return */ public static string buildjson() { // json格式数据解析对象 jsonobject jo = new jsonobject(); // 下面构造两个map、一个list和一个employee对象 map<string, string> map1 = new hashmap<string, string>(); map1.put("name", "alexia"); map1.put("sex", "female"); map1.put("age", "23"); map<string, string> map2 = new hashmap<string, string>(); map2.put("name", "edward"); map2.put("sex", "male"); map2.put("age", "24"); list<map> list = new arraylist<map>(); list.add(map1); list.add(map2); employee employee = new employee(); employee.setname("wjl"); employee.setsex("female"); employee.setage(24); // 将map转换为jsonarray数据 jsonarray ja1 = jsonarray.fromobject(map1); // 将list转换为jsonarray数据 jsonarray ja2 = jsonarray.fromobject(list); // 将bean转换为jsonarray数据 jsonarray ja3 = jsonarray.fromobject(employee); system.out.println("jsonarray对象数据格式:"); system.out.println(ja1.tostring()); system.out.println(ja2.tostring()); system.out.println(ja3.tostring()); // 构造json数据,包括一个map和一个employee对象 jo.put("map", ja1); jo.put("employee", ja2); system.out.println("\n最终构造的json数据格式:"); system.out.println(jo.tostring()); return jo.tostring(); } /** * 解析json数据 * * @param jsonstring json数据字符串 */ public static void parsejson(string jsonstring) { // 以employee为例解析,map类似 jsonobject jb = jsonobject.fromobject(jsonstring); jsonarray ja = jb.getjsonarray("employee"); list<employee> emplist = new arraylist<employee>(); // 循环添加employee对象(可能有多个) for (int i = 0; i < ja.size(); i++) { employee employee = new employee(); employee.setname(ja.getjsonobject(i).getstring("name")); employee.setsex(ja.getjsonobject(i).getstring("sex")); employee.setage(ja.getjsonobject(i).getint("age")); emplist.add(employee); } system.out.println("\n将json数据转换为employee对象:"); for (int i = 0; i < emplist.size(); i++) { employee emp = emplist.get(i); system.out.println("name: " + emp.getname() + " sex: " + emp.getsex() + " age: " + emp.getage()); } } /** * @param args */ public static void main(string[] args) { // todo auto-generated method stub parsejson(buildjson()); } }
运行结果如下
五、与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数据的工具:一是在线工具json edit(http://braincast.nl/samples/jsoneditor/);另一个是eclipse的插件json tree analyzer,都很好用,推荐给大家使用!
以上所述是小编给大家介绍的使用java构造和解析json数据的两种方法(详解一),希望对大家有所帮助!
上一篇: asp.net 程序优化精选第1/2页