json比较简单,所以先从json开始学起。
一 json的名称:
json的全称是javascript object notation,中文名称为js 对象表示法。
json的定义:json是一种轻量级的数据交换格式,具有良好的可读和快速编写的特性。,可以在不同平台间进行数据交换。json采用兼容性很高的文本格式,同时也具备类似于c语言体系的行为。--json.org
二 json的实例和结构:
一个简单的json实例:
{
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}
对该例子的分析如下:
(1)json和js中的对象很像,都是用一个{}来作为边界,用[]来表示是数组。
(2)json包含的内容是键值对(key/value)形式,无序的。
(3)json 具有自我描述的特性。
(4)json的多个属性由逗号隔开,最后一个不需要再加逗号。
三 json的语法规则:
JSON 语法是 JavaScript 对象表示法语法的子集。
四 json的值:
JSON 值可以是:
五 json转换成js对象:
创建包含 JSON 语法的 JavaScript 字符串:
var txt = ‘{ "employees" : [‘ +
‘{ "firstName":"Bill" , "lastName":"Gates" },‘ +
‘{ "firstName":"George" , "lastName":"Bush" },‘ +
‘{ "firstName":"Thomas" , "lastName":"Carter" } ]}‘;
由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。
eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:
var obj = eval ("(" + txt + ")");
六 json在java中的应用:
package com.jelly.json.test;
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.object.DateMorpher;
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;
import com.jelly.json.entity.MyBean;
import com.jelly.json.entity.Person;
import com.jelly.json.entity.Student;
@SuppressWarnings("unchecked")
public class JsonTest {
	
	private static void setDataFormat2JAVA(){
		//设定日期转换格式
		JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));
	} 
	
    //json转成Object
    @Test
    public void testJsonToObj(){
    	String json = "{id:‘1001‘,name:‘张三‘,age:22}";
        Student stu = null;
        setDataFormat2JAVA();
        JSONObject obj = JSONObject.fromObject(json);
        stu = (Student)JSONObject.toBean(obj, Student.class);
        System.out.println(stu);
    }
    
    //从一个JSON数组得到一个java对象数组
    @Test
    public void testJsonArrToArray(){
    	String jsonStus = "[{id:1,name:‘jack‘,age:20},{id:2,name:‘rose‘,age:20},{id:3,name:‘admin‘,age:20}]";
    	JSONArray array = JSONArray.fromObject(jsonStus);
    	Student[] stu = new Student[array.size()];
    	for(int i = 0; i < array.size(); i++){
    		JSONObject jsonObject = array.getJSONObject(i);
    		stu[i] = (Student)JSONObject.toBean(jsonObject, Student.class);
    	}
    	System.out.println(stu[0]);
    	System.out.println(stu[1]);
    	System.out.println(stu[2]);
    	//System.out.println(stu[3]);	会报错
    }
    
    //从一个JSON数组得到一个java集合
    @Test
    public void testJsonArrToList(){
    	String jsonStus = "[{id:1,name:‘jack‘,age:20},{id:2,name:‘rose‘,age:20},{id:3,name:‘admin‘,age:20}]";
    	JSONArray array = JSONArray.fromObject(jsonStus);
    	List<Student> stu = new ArrayList<Student>();
    	for(int i = 0; i < array.size(); i++){
    		JSONObject jsonObject = array.getJSONObject(i);
    		stu.add((Student)JSONObject.toBean(jsonObject, Student.class));
    	}
    	System.out.println(stu.get(0));
    	System.out.println(stu.get(1));
    	System.out.println(stu.get(2));
    }
    //从json数组中得到相应java数组 
    @Test
    public void testArrayForJson(){
    	String jsonString = "[‘q‘,‘c‘,‘d‘]";
    	JSONArray jsonArray = JSONArray.fromObject(jsonString);
    	Object[] strs = jsonArray.toArray();
        System.out.print(strs[0]);
        System.out.print(strs[1]);
        System.out.print(strs[2]);
    }
    
    //字符串转换成json
    @Test
    public void testJsonStrToJSON(){
    	String json = "[‘json‘,‘is‘,‘easy‘]";
        JSONArray jsonArray = JSONArray.fromObject( json );  
        System.out.println( jsonArray );  
        // prints ["json","is","easy"]  
    }
    
    //Map转换成json
    @Test
    public void testMapToJSON(){
        Map map = new HashMap();  
        map.put( "name", "jack" );  
        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 );
    }
    
    //java对象转换为json格式
    @Test
    public void testObjToJson(){
    	JSONObject obj2=new JSONObject();
    	obj2.put("phone","123456");
    	obj2.put("zip","7890");
    	obj2.put("contact",obj2);
    	System.out.print(obj2);
    }
    
    //复合类型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 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 );  
        // prints ["first","second"]  
    }
    
    //普通类型的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);
        }
        
    }
    
}
原文:http://www.cnblogs.com/gaochsh/p/4300739.html