json处理四部曲之第一曲:利用json-lib-xxx.jar处理json
2016-03-11 17:33
525 查看
json-lib-xxx.jar包必需5个依赖包(实测):
ezmorph-xxx.jar
commons-lang-xxx.jar
commons-beanutils-xxx.jar
commons-collections-xxx.jar
commons-logging-xxx.jar
maven项目导入json-lib-xxx.jar及其5个依赖包只需一条语句:
JSONObject.toBean();
JSONObject.toString();
JSONArray.fromObject(); 转为JSONArray类型。处理类型JavaBean、键为任意类型的Map、任意类型的数组、List<JavaBean>、List<Map>
JSONArray.toArray();
JSONArray.toCollection();
JSONObject.toString();
JSONSerializer.toJSON(); 转为JSON类型,因为JSON是接口,JSONObject、JSONArray是它的两个实现类,所以根据传入的参数不同,可以强转为这两种类型。如果传入单个JavaBean对象,就可以强转为JSONObject类型;如果传入一个List对象,则可以强转为JSONArray类型。如果不强转,打印出来的话也会自动转为正确类型的。
以 { 左大括号开始,以 } 右大括号结束,中间以冒号及逗号分隔的字符串也可以转成JSONObject类型:
打印结果是:{"name":"zhangsan","age":18}
以 [ 中括号开始,以 ] 右中括号结束、中间以逗号分隔的字符串也可以转成JSONArray类型:
zhangsan
java.lang.String
1
java.lang.Integer
2.5
java.lang.Double
true
java.lang.Boolean
JSONObject对象new出来之后添加元素的两种方式:
1.当成一个map,用put(String,Object)方法:
2.用element(String,Object)方法:
对比得知,element(String,Object)方法更加简单。
JSONArray对象new出来后添加元素也有两种方式:
1.当成一个list,用add(Object)方法:
zhangsan----java.lang.String
18----java.lang.Integer
5000.5----java.lang.Double
true----java.lang.Boolean
2.使用用element(Object)方法:
zhangsan----java.lang.String
18----java.lang.Integer
5000.5----java.lang.Double
true----java.lang.Boolean
通过对比得知,还是element(Object)方法简便些。
二. 把JSONObject、JSONArray转换成JavaBean等等
1.JSONObject.toBean( JSONObject jsonObject, Class beanClass ),此处的JSONObject对象可以是new 出来的,也可以是通过fromObject()由各种类型转(JavaBean、Map、特殊格式的String等等)换过来的:、
注意,toBean()的第二个参数即要转换成的实体类实例不要省略,如果省略了得到的类型就不是我们自己创建的实体类类型了,而是json-lib框架自带的net.sf.ezmorph.bean.MorphDynaBean类型了。
2.JSONObject.toBean(JSONObject jsonObject, Class beanClass, Map classMap)静态方法将JSONObject对象转换成Map对象:
注意,第三个参数有以下要求:键只能是字符串,值只能是类实例,如上例中的clazzMap.put("ZHANGSAN",Person.class)。
3.JSONArray.toArray(JSONArray jsonArray, Class objectClass) 静态方法将JSONArray对象转换成数组,同理,JSONArray对象可以是new出来的,也可以是通过fromObject()由各种类型转换过来的:
4.JSONArray.toCollection(JSONArray jsonArray, Class objectClass)静态方法将JSONArray对象转换成Collection对象,再强转为List对象。
Person [name=zhangsan, age=18, salary=5000.5]
ezmorph-xxx.jar
commons-lang-xxx.jar
commons-beanutils-xxx.jar
commons-collections-xxx.jar
commons-logging-xxx.jar
maven项目导入json-lib-xxx.jar及其5个依赖包只需一条语句:
<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency>常用的方法有几个:JSONObject.fromObject(); 转为JSONObject类型。处理类型JavaBean、键为任意类型的Map
JSONObject.toBean();
JSONObject.toString();
JSONArray.fromObject(); 转为JSONArray类型。处理类型JavaBean、键为任意类型的Map、任意类型的数组、List<JavaBean>、List<Map>
JSONArray.toArray();
JSONArray.toCollection();
JSONObject.toString();
JSONSerializer.toJSON(); 转为JSON类型,因为JSON是接口,JSONObject、JSONArray是它的两个实现类,所以根据传入的参数不同,可以强转为这两种类型。如果传入单个JavaBean对象,就可以强转为JSONObject类型;如果传入一个List对象,则可以强转为JSONArray类型。如果不强转,打印出来的话也会自动转为正确类型的。
以 { 左大括号开始,以 } 右大括号结束,中间以冒号及逗号分隔的字符串也可以转成JSONObject类型:
String str = "{'name':'zhangsan','age':18}"; str="{name:'zhangsan',age:18}"; //字符串中的键可以没有单引号或者双引号括住,但是值如果是字符串的话,还是必须要有单引号或是双引号括住的 //此外,字符串中任意位置(非键或者值内部)是可以有任意数量空格的,fromObject()方法会自动去掉空格、添加双引号的 JSONObject jSONObject = JSONObject.fromObject(str); System.out.println(jSONObject);
打印结果是:{"name":"zhangsan","age":18}
以 [ 中括号开始,以 ] 右中括号结束、中间以逗号分隔的字符串也可以转成JSONArray类型:
String str = "['zhangsan',1,2.5,true]"; JSONArray jSONArray = JSONArray.fromObject(str); System.out.println(jSONArray); if (jSONArray != null && jSONArray.size() > 0) { for (int i = 0; i < jSONArray.size(); i++) { System.out.println(jSONArray.get(i)); System.out.println(jSONArray.get(i).getClass().getName()); } }打印结果是:["zhangsan",1,2.5,true]
zhangsan
java.lang.String
1
java.lang.Integer
2.5
java.lang.Double
true
java.lang.Boolean
JSONObject对象new出来之后添加元素的两种方式:
1.当成一个map,用put(String,Object)方法:
JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "zhangsan"); jsonObject.put("age", 21); jsonObject.put("salary", 5000.5); jsonObject.put("boolean", true); System.out.println(jsonObject);打印结果是:{"name":"zhangsan","age":21,"salary":5000.5,"boolean":true}
2.用element(String,Object)方法:
JSONObject jsonObject = new JSONObject().element("name", "zhangsan").element("age", 21) .element("salary", 5000.5).element("boolean", true); System.out.println(jsonObject);打印结果也是:{"name":"zhangsan","age":21,"salary":5000.5,"boolean":true}
对比得知,element(String,Object)方法更加简单。
JSONArray对象new出来后添加元素也有两种方式:
1.当成一个list,用add(Object)方法:
JSONArray jsonArray = new JSONArray(); jsonArray.add("zhangsan"); jsonArray.add(18); jsonArray.add(5000.5); jsonArray.add(true); System.out.println(jsonArray); for (int i = 0; i < jsonArray.size(); i++) { Object o = jsonArray.get(i); System.out.println(o + "----" + o.getClass().getName()); }打印结果是:["zhangsan",18,5000.5,true]
zhangsan----java.lang.String
18----java.lang.Integer
5000.5----java.lang.Double
true----java.lang.Boolean
2.使用用element(Object)方法:
JSONArray jsonArray = new JSONArray().element("zhangsan").element(18).element(5000.5).element(true); System.out.println(jsonArray); for (int i = 0; i < jsonArray.size(); i++) { Object o = jsonArray.get(i); System.out.println(o + "----" + o.getClass().getName()); }打印结果也是:["zhangsan",18,5000.5,true]
zhangsan----java.lang.String
18----java.lang.Integer
5000.5----java.lang.Double
true----java.lang.Boolean
通过对比得知,还是element(Object)方法简便些。
二. 把JSONObject、JSONArray转换成JavaBean等等
1.JSONObject.toBean( JSONObject jsonObject, Class beanClass ),此处的JSONObject对象可以是new 出来的,也可以是通过fromObject()由各种类型转(JavaBean、Map、特殊格式的String等等)换过来的:、
@Test public void readJSON2Bean() { //可以看出以下两种格式的字符串都可以转换成JSONObject String json = "{\"name\":\"zhangsan\",\"age\":18,\"salary\":5000.5}"; String json2 = "{'name':'lisi','age':20,'salary':4000.5}"; JSONObject jsonObject = JSONObject.fromObject(json); JSONObject jsonObject2 = JSONObject.fromObject(json2); Person person = (Person) JSONObject.toBean(jsonObject, Person.class); System.out.println(person); Person person2 = (Person) JSONObject.toBean(jsonObject2, Person.class); System.out.println(person2); }
注意,toBean()的第二个参数即要转换成的实体类实例不要省略,如果省略了得到的类型就不是我们自己创建的实体类类型了,而是json-lib框架自带的net.sf.ezmorph.bean.MorphDynaBean类型了。
2.JSONObject.toBean(JSONObject jsonObject, Class beanClass, Map classMap)静态方法将JSONObject对象转换成Map对象:
@Test public void readJSON2Map() { String json = "{\"name\":\"zhangsan\",\"age\":18,\"salary\":5000.5}"; JSONObject jsonObject = JSONObject.fromObject(json); Map<String, Class<Person>> clazzMap = new HashMap<String, Class<Person>>(); clazzMap.put("ZHANGSAN", Person.class); @SuppressWarnings("unchecked") Map<String, Object> map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class, clazzMap); System.out.println(map); }打印结果是:{age=18, name=zhangsan, salary=5000.5}
注意,第三个参数有以下要求:键只能是字符串,值只能是类实例,如上例中的clazzMap.put("ZHANGSAN",Person.class)。
3.JSONArray.toArray(JSONArray jsonArray, Class objectClass) 静态方法将JSONArray对象转换成数组,同理,JSONArray对象可以是new出来的,也可以是通过fromObject()由各种类型转换过来的:
@Test public void readJSON2Array() { String json = "{\"name\":\"zhangsan\",\"age\":18,\"salary\":5000.5}"; json = "[" + json + "]"; // 把特殊字符串转换成JSONArray JSONArray jsonArray = JSONArray.fromObject(json); // 利用JSONArray的toArray(JSONArray jsonArray, Class objectClass) 静态方法 Person[] persons = (Person[]) JSONArray.toArray(jsonArray, Person.class); if (persons != null && persons.length > 0) { System.out.println(persons[0]); } }打印结果是:Person [name=zhangsan, age=18, salary=5000.5]
4.JSONArray.toCollection(JSONArray jsonArray, Class objectClass)静态方法将JSONArray对象转换成Collection对象,再强转为List对象。
@Test public void readJSON2List() { String json = "{\"name\":\"zhangsan\",\"age\":18,\"salary\":5000.5}"; json = "[" + json + "]"; JSONArray jsonArray = JSONArray.fromObject(json); @SuppressWarnings("unchecked") Collection<Person> c = JSONArray.toCollection(jsonArray, Person.class); List<Person> list = (List<Person>) c; System.out.println(list); if (list != null && list.size() > 0) { for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }打印结果是:[Person [name=zhangsan, age=18, salary=5000.5]]
Person [name=zhangsan, age=18, salary=5000.5]
相关文章推荐
- JS封装类或对象的最佳方案
- javascript深入理解js闭包
- 上海javascript的面试题
- Json对象和字符串互相转换
- 在JS中,一个自定义函数如何调用另一个自定义函数中的变量
- javascript事件
- JS---重载
- JavaScript正则表达式方法简介
- json-lib 之jsonConfig具体应用
- 原生JavaScript 全特效微博发布面板效果实现
- 设置JSP页面无缓存
- js中的基本类型与包装类型
- Jsp与servlet的区别
- Datatable转Json,并过滤特殊字符
- Js之将jsp转word
- JavaScript操作HTML DOM节点的基础教程
- js dom
- json字符串转List集合
- BZOJ1030 JSOI2007 文本生成器 题解&代码
- js中,销魂的this