使用json-lib進行Java和JSON之間的轉換

今天看到一個關於json轉換的不錯的博客,就把它複製了,原來的網址爲http://www.cnblogs.com/mailingfeng/archive/2012/01/18/2325707.html,很是感謝這位html

1. json-lib是一個java類庫,提供將Java對象,包括beans, maps, collections, java arrays and XML等轉換成JSON,或者反向轉換的功能。java

 

2. json-lib 主頁 : http://json-lib.sourceforge.net/apache

 

3.執行環境json

     須要如下類庫支持數組

  • 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.功能示例this

   這裏經過JUnit-Case例子給出代碼示例.net

 

 

package com.mai.json;htm

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;blog

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

相關文章
相關標籤/搜索