json

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 {
     public static void main(String[] args) {
// testArrayToJSON();
// testListToJSON();
// testJsonStrToJSON();
// testMapToJSON();
testBeadToJSON2();
}
public static void testJSONObject() {  
    JSONObject JSON = new JSONObject();
    JSON.put("username","huangwuyi");  
    JSON.put("sex", "男");
    JSON.element("address", "福建省");  
        System.out.println("jsonObject==>"+JSON);  
        //{"username":"huangwuyi","sex":"男","address":"福建省"}
        JSONArray jsonArray = new JSONArray();  
        jsonArray.add(0, "array1");  
        jsonArray.add(1,"array2");  
        JSON.element("jsonArray", jsonArray);  
        JSONArray array = JSON.getJSONArray("jsonArray");  
        System.out.println("JSONArray==>"+array);  
        //["array1","array2"]
        System.out.println("结果="+JSON);  
        //{"username":"huangwuyi","sex":"男","address":"福建省","jsonArray":["array1","array2"]}
        String temp=JSON.toString();
        JSONObject object = JSONObject.fromObject(temp);
        System.out.println("username="+object.get("username"));
       
    }  
private static void testBeadToJSON2() {
TestObjectToJson obj = new TestObjectToJson();
Gson gson = new Gson();
String json = gson.toJson(obj);
System.out.println(json);
//{"id":100,"name":"hello"}
String jsonString="{'id':100,'name':'hello'}";
TestObjectToJson toObj = gson.fromJson(json, TestObjectToJson.class); 

}

static class TestObjectToJson {
private int id = 100;
private String name = "hello";
}

private static void testBeadToJSON() {
JsonArray array = new JsonArray();
JsonObject top = new JsonObject();
top.addProperty("id", "ii");
top.addProperty("pId", "pp");
top.addProperty("name", "nn");
top.addProperty("lvl", "1");
array.add(top);
JsonObject second = new JsonObject();
second.addProperty("id", "i2");
second.addProperty("pId", "p2");
second.addProperty("name", "n2");
second.addProperty("lvl", "2");
array.add(second);

System.out.println(top.toString());
// {"id":"ii","pId":"pp","name":"nn","lvl":"1"}
System.out.println(array.toString());
// [{"id":"ii","pId":"pp","name":"nn","lvl":"1"},{"id":"i2","pId":"p2","name":"n2","lvl":"2"}]
}

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

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

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

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);
// {"arr":["a","b"],"int":1,"name":"json","func":function(i){ return this.arr[i]; },"bool":true}
}
    //复合类型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

你可能感兴趣的:(json)