json入門教程+在java中的一些便捷操作

來源:互聯網
上載者:User

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); 
        } 
         
    } 
     

這是項目目錄結構
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.