博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用json-lib进行Java和JSON之间的转换(转)
阅读量:5751 次
发布时间:2019-06-18

本文共 5962 字,大约阅读时间需要 19 分钟。

转载: 稍许改动

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

2. json-lib 主页 : 

3. 执行环境

     需要以下类库支持

  • 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

4.功能示例

主程序

package com.clzhang.sample.json;import static org.junit.Assert.assertEquals;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import net.sf.ezmorph.Morpher;import net.sf.ezmorph.MorpherRegistry;import net.sf.ezmorph.bean.BeanMorpher;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import net.sf.json.util.JSONUtils;import org.apache.commons.beanutils.PropertyUtils;import org.junit.Test;/** * JSON-lib包是一个JavaBean、Collection、Map、Array和XML等数据结构与JSON之间互相转换的包。 * 关于JSONArray与JSONObject的差别,请参考前一篇文章。 * @author acer * */public class JSONLibTest {    // 一般数组转换成JSON//    @Test    public void testArrayToJSON() {        boolean[] boolArray = new boolean[]{
true, false, true}; JSONArray jsonArray = JSONArray.fromObject(boolArray); System.out.println(jsonArray); } // Collection对象转换成JSON// @Test public void testListToJSON() { List
list = new ArrayList
(); list.add("first"); list.add("second"); JSONArray jsonArray = JSONArray.fromObject(list); System.out.println(jsonArray); } // 字符串JSON转换成JSON,根据情况是用JSONArray或JSONObject// @Test public void testJSONStrToJSON() { JSONArray jsonArray = JSONArray.fromObject("['json','is','easy']"); System.out.println(jsonArray); } // Map转换成JSON, 是用jsonObject// @Test public 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); } // 复合类型bean转成成JSON// @Test public 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); } // 普通类型的JSON字符串转换成对象// @Test public void testJSONToObject() throws Exception { 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); Object bean = JSONObject.toBean(jsonObject); assertEquals(jsonObject.get("name"), PropertyUtils.getProperty(bean, "name")); assertEquals(jsonObject.get("bool"), PropertyUtils.getProperty(bean, "bool")); assertEquals(jsonObject.get("int"), PropertyUtils.getProperty(bean, "int")); assertEquals(jsonObject.get("double"), PropertyUtils.getProperty(bean, "double")); assertEquals(jsonObject.get("func"), PropertyUtils.getProperty(bean, "func")); 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")); @SuppressWarnings("unchecked") List arrayList = (List)JSONArray.toCollection(jsonObject.getJSONArray("array")); for (Object object : arrayList) { System.out.println(object); } } // 将JSON解析成复合类型对象, 包含List// @Test public 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); List
list = diyBean.getList(); for(Person p: list){ System.out.println(p.getName()); } } // 将JSON解析成复合类型对象, 包含Map @Test public void testJSONToBeanHavaMap() { // 把Map看成一个对象 String json = "{list:[{name:'test1'},{name:'test2'}],map:{testa:{name:'testa1'},testb:{name:'testb2'}}}"; 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); // 1.List完全解析,可以直接输出 List
list = diyBean.getList(); for (Person p: list) { System.out.println(p.getName()); } System.out.println("-------------------"); // 2.Map没有完全解析,下面的结果不是想要的结果 Map
map = diyBean.getMap(); for(Map.Entry
entry: map.entrySet()) { System.out.println(entry.getKey()); System.out.println(entry.getValue()); } System.out.println("-------------------"); // Map经过下面的处理后,输出为想要的结果 //2.1 先往注册器中注册变换器,需要用到ezmorph包中的类 MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry(); Morpher dynaMorpher = new BeanMorpher(Person.class, morpherRegistry); morpherRegistry.registerMorpher(dynaMorpher); // 这里的map没进行类型暗示,故按默认的,里面存的为net.sf.ezmorph.bean.MorphDynaBean类型的对象 Map
transMap = new HashMap
(); for(Map.Entry
entry: map.entrySet()) { //2.2 使用注册器对指定Bean进行对象变换 transMap.put(entry.getKey(), (Person) morpherRegistry.morph(Person.class, entry.getValue())); } //2.3 最终输出正确的结果 for(Map.Entry
entry: transMap.entrySet()) { Person p = entry.getValue(); System.out.println(entry.getKey() + "->" + p.getName()); } System.out.println("-------------------"); }}

方法testJSONToBeanHavaMap()输出如下:

test1

test2
-------------------
testb
[
  {name=testb2}
]
testa
[
  {name=testa1}
]
-------------------
testb->testb2
testa->testa1
-------------------

5.下面提供上面例子所需的资源,包括jar包和代码

 

你可能感兴趣的文章
HTML禁止右键复制【两行代码实现】
查看>>
新分类:C++复习笔记
查看>>
Java List 的深拷贝
查看>>
浅谈微信小程序实现页面数据显示
查看>>
关于Mysql的索引
查看>>
MyEclipse 安装插件(freemarker)
查看>>
2017-2018-2 20155303『网络对抗技术』Final:Web渗透获取WebShell权限
查看>>
程序动态切片技术研究
查看>>
vim 基本使用
查看>>
我同时遇到了两个自己
查看>>
ubuntu16.04安装oracle12C
查看>>
hdu4027
查看>>
df说磁盘空间满了, du说没有,到底谁是对的
查看>>
Wannafly模拟赛3
查看>>
springmvc下的web.xml的配置
查看>>
主机-配件-接口-整机-3c-1
查看>>
职业生涯
查看>>
JQ_完美hover技巧
查看>>
索引 聚集索引 唯一索引 普通索引 联合索引 覆盖索引
查看>>
HTML学习笔记03-HTML基础
查看>>