一、简介 

json-lib是一个Java类库,提供将Java对象,包括beans,maps,collections,java arrays和xml等转换成JSON,或者反向转换的功能。

二、准备

在使用json-lib之前,我们应该到官方网址下载如下包:

  • jakarta commons-lang 2.5

  • jakarta commons-beanutils 1.8.0

  • jakarta commons-collections 3.2.1

  • jakarta commons-logging 1.1.1

  • ezmorph 1.0.6

并将这些jar包引入到Eclipse项目当中,即可调用。

三、讲解 

在进行下面的代码演示之前,我们先将几个基本的类介绍一下:

MyBean类:

public class MyBean {
private String id = null;
private String name = null;
ᅠ ᅠ private Date date = null;
ᅠ ᅠ private List cardNum = null;
private String[] cardType = {"身份证", "银行卡" , "公车卡"}; ᅠ ᅠ public String getId() {
return id;
}
ᅠ ᅠ public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
ᅠ ᅠ public void setName(String name) {
this.name = name;
}
ᅠ ᅠ public Date getDate() {
return date;
}
ᅠ ᅠ public void setDate(Date date) {
this.date = date;
}
ᅠ ᅠ public List getCardNum() {
ᅠ ᅠ ᅠ ᅠ return cardNum;
}
ᅠ ᅠ public void setCardNum(List cardNum) {
ᅠ ᅠ ᅠ ᅠ this.cardNum = cardNum;
}
ᅠ ᅠ public String[] getCardType() {
ᅠ ᅠ ᅠ ᅠ return cardType;
}
ᅠ ᅠ public void setCardType(String[] cardType) {
this.cardType = cardType;
}
}

Person类:

public class Person {
private String name = null;
public Person(){
}
public Person(String name){
this.name = name;
}
ᅠ ᅠ public String getName() {
return name;
}
ᅠ ᅠ public void setName(String name) {
this.name = name;
}
} MyBeanWithPerson类:
public class MyBeanWithPerson {
private List<Person> list = null;
ᅠ ᅠ private Map<String,Person> map = null;
ᅠ ᅠ public List getList() {
return list;
}
ᅠ ᅠ public void setList(List list) {
this.list = list;
}
ᅠ ᅠ public Map getMap() {
return map;
}
ᅠ ᅠ public void setMap(Map map) {
this.map = map;
}
}

1.将json字符串转换成JSON,根据情况用JSONArray或JSONObject 

public static void testJsonStrToJSON() {
JSONArray jsonArray = JSONArray.fromObject("[\"json\",\"is\",\"easy\"]");
ᅠ ᅠ System.out.println(jsonArray);
}

2.将Java Bean转换成JSON对象 

public static void testBeadToJSON() {
MyBean bean = new MyBean();
bean.setId("001");
bean.setName("银行卡");
bean.setDate(new Date()); ᅠ ᅠ List cardNum = new ArrayList();
cardNum.add("农行");
cardNum.add("工行");
cardNum.add("建行");
cardNum.add(new Person("test")); ᅠ ᅠ bean.setCardNum(cardNum); ᅠ ᅠ JSONObject jsonObject = JSONObject.fromObject(bean);
ᅠ ᅠ System.out.println(jsonObject);
}

3.将一般的数组转换成JSON 

public static void testArrayToJSON() {
boolean[] boolArray = new boolean[] { true, false, true };
JSONArray jsonArray = JSONArray.fromObject(boolArray);
System.out.println(jsonArray);
}

4.将Collection对象转换成JSON 

public static void testListToJSON() {
List list = new ArrayList();
list.add("first");
list.add("second");
ᅠ ᅠ JSONArray jsonArray = JSONArray.fromObject(list);
ᅠ ᅠ System.out.println(jsonArray);
}  

5.将Map转换成JSON 

public static void testMapToJSON() {
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 jsonObject = JSONObject.fromObject(map);
ᅠ ᅠ System.out.println(jsonObject);
}

6.将普通类型的JSON字符串转换成JSON 

public static void testJSONToObject() throws Exception {
// 将JSon字符串转换成JsonObject对象
String json = "{name=\"json\",bool:true,int:1,double:2.2,func:\"function(a){ return a; }\",array:[1,2]}";
JSONObject jsonObject = JSONObject.fromObject(json);
System.out.println(jsonObject); // 将JsonObject对象转换成JavaBean对象
Object bean = JSONObject.toBean(jsonObject);
ᅠ ᅠ System.out.println(PropertyUtils.getProperty(bean, "name"));
ᅠ ᅠ System.out.println(PropertyUtils.getProperty(bean, "bool"));
ᅠ ᅠ System.out.println(PropertyUtils.getProperty(bean, "int"));
System.out.println(PropertyUtils.getProperty(bean, "double"));
ᅠ ᅠ System.out.println(PropertyUtils.getProperty(bean, "func"));
ᅠ ᅠ System.out.println(PropertyUtils.getProperty(bean, "array"));
ᅠ ᅠ List arrayList = (List) JSONArray.toCollection(jsonObject.getJSONArray("array"));
ᅠ ᅠ for (Object object : arrayList) {
System.out.println(object);
}
}  

7.将复合类型的JSON字符串转换成复合对象,包含List 

public static void testJSONToBeanHavaList() {
String json = "{list:[{name:\"test1\"},{name:\"test2\"}]}";
Map classMap = new HashMap();
classMap.put("list", Person.class);
ᅠ ᅠ MyBeanWithPerson diyBean = (MyBeanWithPerson) JSONObject.toBean(
ᅠ ᅠ JSONObject.fromObject(json), MyBeanWithPerson.class, classMap);
ᅠ ᅠ System.out.println(diyBean); ᅠ ᅠ List list = diyBean.getList();
for (Object o : list) {
if (o instanceof Person) {
Person p = (Person) o;
ᅠ ᅠ ᅠ ᅠ ᅠ ᅠ System.out.println(p.getName());
}
}
}

8.将复合类型的JSON字符串转换成复合对象,包含Map 

public static void testJSONToBeanHavaMap() {
// 把Map看成一个对象
String json = "{list:[{name:\"test1\"},{name:\"test2\"}],map:{test1:{name:\"test1\"},test2:{name:\"test2\"}}}";
Map classMap = new HashMap();
classMap.put("list", Person.class);
classMap.put("map", Map.class);
// 使用暗示,直接将json解析为指定自定义对象,其中List完全解析,Map没有完全解析
MyBeanWithPerson diyBean =(MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json), MyBeanWithPerson.class, classMap);
ᅠ ᅠ System.out.println(diyBean); ᅠ ᅠ System.out.println("do the list release");
List<Person> list = diyBean.getList();
for (Person o : list) {
Person p = (Person) o;
ᅠ ᅠ ᅠ ᅠ System.out.println(p.getName());
} ᅠ ᅠ System.out.println("do the map release");
// 先往注册器中注册变换器,需要用到ezmorph包中的类
MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry();
ᅠ ᅠ Morpher dynaMorpher = new BeanMorpher(Person.class, morpherRegistry);
morpherRegistry.registerMorpher(dynaMorpher); ᅠ ᅠ Map map = diyBean.getMap();
//这里的map没进行类型暗示,故按默认的,里面存的为net.sf.ezmorph.bean.MorphDynaBean类型的对象
ᅠ ᅠ System.out.println(map);
ᅠ ᅠ ᅠList<Person> output = new ArrayList();
ᅠ ᅠ for (Iterator i = map.values().iterator(); i.hasNext();) {
// 使用注册器对指定DynaBean进行对象变换
output.add((Person) morpherRegistry.morph(Person.class, i.next()));
} for (Person p : output) {
ᅠ ᅠ ᅠ ᅠ System.out.println(p.getName());
}
}

你必须掌握的Java基础:JSON解析工具-json-lib的更多相关文章

  1. JSON 解析工具的封装(Java)

    JSON 解析工具的封装(Java) 一直想有一个属于自己的JSON工具,今天终于弄好了..... 1.添加pom依赖包 <!--json解析--> <dependency> ...

  2. java后台常用json解析工具问题小结

    若排版紊乱可查看我的个人博客原文地址 java后台常用json解析工具问题小结 这里不细究造成这些问题的底层原因,只是单纯的描述我碰到的问题及对应的解决方法 jackson将java对象转json字符 ...

  3. Java:JSON解析工具-org.json

    一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...

  4. JSON解析工具比较,主要GSON和FastJSON

    JSON解析工具比较,主要GSON和FastJSON 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确 ...

  5. [转] 各种Json解析工具比较 - json-lib/Jackson/Gson/FastJson

    JSON技术的调研报告 一 .各个JSON技术的简介和优劣1.json-libjson-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,包括com ...

  6. Json解析工具Jackson(使用注解)

    原文http://blog.csdn.net/nomousewch/article/details/8955796 接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给 ...

  7. 自定义Json解析工具

    此博客为博主原创文章,转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10689536.html fastjson是很好用的json解析工具,只可惜项目中要 ...

  8. JSON解析工具-org.json使用教程

    转自:http://www.open-open.com/lib/view/open1381566882614.html 一.简介  org.json是Java常用的Json解析工具,主要提供JSONO ...

  9. Java XML Dom解析工具

    Java XML Dom解析工具 缩进等 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); ...

  10. java基础-Eclipse开发工具介绍

    java基础-Eclipse开发工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 所谓工欲善其事必先利其器,即将身为一名Java开发工程师怎么能没有一款好使的IDE呢?今天就 ...

随机推荐

  1. c# winform InvokeRequired 解决跨线程访问控件

    C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它. Windows 窗体中 ...

  2. (原创)初识cordova(一)

    在公司做项目,发现有人在做大项目使用了cordova技术.做的是昆山的项目.之前听说过phonegap,也测试过,但是感觉效率不是很好,就没怎么研究,后来看他们做的项目还不错,于是想试一试. 搭建开发 ...

  3. [转] iOS性能优化技巧

    (转自:hhttp://www.raywenderlich.com/31166/25-ios-app-performance-tips-tricks#arc, http://blog.ibireme. ...

  4. 通过 yum update 将系统从CentOS 6.2 升级到 CentOS 6.6 及升级过程中的简单排错

    本文说明 本文写于2014年的WP中,后WP停止维护,今天翻到此记录整理下,记录于此,方便日后查看. 话说那时候写博客真是认真啊~哈哈~ 升级前的系统信息 [root@thatsit ~]# unam ...

  5. DataGrid( 数据表格) 组件[9]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  6. OD: Memory Attach Technology - Exception

    看到第六章了:形形色色的内存攻击技术 异常处理结构体 S.E.H Structure Exception Handler S.E.H 是 Windows 处理异常的重要数据结构.每个 S.E.H 为 ...

  7. for-of循环

    /* 1. 遍历数组 2. 遍历Set 3. 遍历Map 4. 遍历字符串 5. 遍历伪数组 6. 可迭代的对象 */var arr = [2,3,4];for(let ele of arr) { c ...

  8. 解决sql2008连接数据库,无法为该请求检索数据,错误916

    通常在使用sql server management studio 2008 连接数据库,可以链接上,但是无法查看自己的数据库,点击数据库或刷新数据库列表后,提示:无法为该请求检索数据,错误916,如 ...

  9. 2:url有规律的多页面爬取

    举例网站:http://www.luoo.net/music/期刊号 e.g:http://www.luoo.net/music/760 打算爬取其title:Hello World:pic:desc ...

  10. Asp.Net WebAPI 通过HttpContextBase获取请求参数

    WEBAPI中的Request是HttpRequestMessage类型,不能像Web传统那样有querystring和from 方法接收参数,而传统的HttpReqest的基类是HttpReqest ...