當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
使用json-lib进行Java和JSON之间的转换
生活随笔
收集整理的這篇文章主要介紹了
使用json-lib进行Java和JSON之间的转换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉自http://www.cnblogs.com/mailingfeng/archive/2012/01/18/2325707.html
1. json-lib是一個java類庫,提供將Java對象,包括beans, maps, collections, java arrays and XML等轉換成JSON,或者反向轉換的功能。
?
2. json-lib 主頁 :?http://json-lib.sourceforge.net/
?
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.功能示例
?? 這里通過JUnit-Case例子給出代碼示例
??
package?com.mai.json;import?static?org.junit.Assert.assertEquals;
import?java.util.ArrayList;
import?java.util.Date;
import?java.util.HashMap;
import?java.util.Iterator;
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;
public?class?JsonLibTest?{
????/*
?????*??普通類型、List、Collection等都是用JSONArray解析
?????*??
?????*??Map、自定義類型是用JSONObject解析
?????*??可以將Map理解成一個對象,里面的key/value對可以理解成對象的屬性/屬性值
?????*??即{key1:value1,key2,value2......}
?????*?
?????*?1.JSONObject是一個name:values集合,通過它的get(key)方法取得的是key后對應的value部分(字符串)
?????*?????????通過它的getJSONObject(key)可以取到一個JSONObject,-->?轉換成map,
?????*?????????通過它的getJSONArray(key)?可以取到一個JSONArray?,
?????*?
?????*?
?????*/
????
????//一般數組轉換成JSON
????@Test
????public?void?testArrayToJSON(){
????????boolean[]?boolArray?=?new?boolean[]{true,false,true};??
????????JSONArray?jsonArray?=?JSONArray.fromObject(?boolArray?);??
????????System.out.println(?jsonArray?);??
????????//?prints?[true,false,true]??
????}
????
????
????//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?);??
????????//?prints?["first","second"]??
????}
????
????
????//字符串json轉換成json,?根據情況是用JSONArray或JSONObject
????@Test
????public?void?testJsonStrToJSON(){
????????JSONArray?jsonArray?=?JSONArray.fromObject(?"['json','is','easy']"?);??
????????System.out.println(?jsonArray?);??
????????//?prints?["json","is","easy"]??
????}
????
????
????//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"));
????????
????????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:{test1:{name:'test1'},test2:{name:'test2'}}}";
//????????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());
????????????}
????????}
????}
????
????
????//將json解析成復合類型對象,?包含Map
????@Test
????public?void?testJSONToBeanHavaMap(){
????????//把Map看成一個對象
????????String?json?=?"{list:[{name:'test1'},{name:'test2'}],map:{testOne:{name:'test1'},testTwo:{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); /*輸出: {testOne=net.sf.ezmorph.bean.MorphDynaBean@f73c1[
? {name=test1}
], testTwo=net.sf.ezmorph.bean.MorphDynaBean@186c6b2[
? {name=test2}
]} */
????????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()); /*輸出: test1
test2 */
????????}
????????
????}
????
????
????
}
?
5.下面提供上面例子所需的資源,包括jar包和代碼
/Files/mailingfeng/json-lib/json-lib用例所需jar包和java類.rar?
轉載于:https://www.cnblogs.com/varorbc/p/4101799.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的使用json-lib进行Java和JSON之间的转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Navicat\PLSQLDev连接or
- 下一篇: VS2008系列培训教程之四:What'