JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,非常適合於伺服器與 JavaScript的互動。相比XML,他更易於人閱讀和編寫,它是JavaScript的一個子集。 JSON採用完全獨立於語言的文字格式設定,可以在流行的語言中使用,比如C# Java C++ VB。這些特性使JSON成為理想的資料交換語言。
一、Json的構建結構
1. “鍵/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),記錄(record),結構(struct),字典(dictionary),雜湊表(hash table),有鍵列表(keyed list),或者關聯陣列(associative array)。
2. 值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。
這些都是常見的資料結構。事實上大部分現代電腦語言都以某種形式支援它們。這使得一種資料格式在同樣基於這些結構的程式設計語言之間交換成為可能。
二、JSon具體表現形式
1、對象是一個無序的“‘鍵/值’對”集合。一個對象以“{”(左括弧)開始,“}”(右括弧)結束。每個“名稱”後跟一個“:”(冒號);“‘名稱/值’對”之間使用“,”(逗號)分隔。
2、數組是值(value)的有序集合。一個數組以“[”(左中括弧)開始,“]”(右中括弧)結束。值之間使用“,”(逗號)分隔。
3、值(value)可以是雙引號括起來的字元(string)、數值(number)、true、false、 null、對象(object)或者數組(array)。這些結構可以嵌套。
4、字串(string)是由雙引號包圍的任意數量Unicode字元的集合,使用反斜線轉義。
一個字元(character)即一個單獨的字串(character string)。字串(string)與C或者Java的字串非常相似。
5、數值(number)也與C或者Java的數值非常相似。除去未曾使用的八進位與十六進位格式。除去一些編碼細節。
在javascript中
[javascript] view plaincopyprint?
<script type="text/javascript">
var json = "{name:'jack', age:20, city:{address:'北京市',street:'朝陽區'}}";
alert(json.name);
alert(json.age);
alert(json.city.address + json.city.street);
</script>
大家可以自己試試看!
三、JSon在Java中應用
廢話不說直接上代碼!!這裡我用的Junit做的測試,如果不懂的童鞋可以學習一下,我的示範相對簡單。
[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){ www.2cto.com
System.out.println(object);
}
}
}
這是項目目錄結構