1. 程式人生 > >json入門教程+在java中的一些便捷操作

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

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)truefalse null、物件(object)或者陣列(array)。這些結構可以巢狀。

4、字串(string)是由雙引號包圍的任意數量Unicode字元的集合,使用反斜線轉義。

一個字元(character)即一個單獨的字串(character string)。字串(string)與C或者Java的字串非常相似。

5、數值(number)也與C或者Java的數值非常相似。除去未曾使用的八進位制與十六進位制格式。除去一些編碼細節。

在javascript中

<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做的測試,如果不懂的童鞋可以學習一下,我的演示相對簡單。
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);
        }
        
    }
    
}

這是專案目錄結構

原始碼已經傳了,附帶6個必須jar包,大家可以下載看看,免積分的!

下載原始碼


相關推薦

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

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,非常適合於伺服器與 JavaScript的互動。相比XML,他更易於人閱讀和編寫,它是JavaScript的一個子集。 JSON採用完全獨立於語言的文字格式,可以在流行的語言中

Java使用Jedis操作Redis—Redis快速入門

     這裡先說Java中使用Jedis操作Redis,稍後會整理Redis快速入門來詳細介紹Redis(跟著專案走會更容易理解)。 Java連線Redis: 在Java程式中使用Redis之前,我們需要先確保在機器上安裝了Redis服務及Java Redis驅動程式

Java一些jar包的作用

span 緩存 cxf 6.0 pri tag like servlet license axis.jar SOAP引擎包 commons-discovery-0.2.jar 用來發現、查找和實現可插入式接口,提供一些一般類實例化、單件的生命周期管理的常用方法. j

Java使用Jedis操作Redis

移除 keys pre java max value con print 處的 轉載:http://www.cnblogs.com/liuling/p/2014-4-19-04.html 使用Java操作Redis需要jedis-2.1.0.jar,下載地址:http://

java的位操作

ble 其他 自動 byte 有符號 cnblogs 運算 編譯 位移操作 之前做項目的時候使用位操作不是很多,今天在刷leetcode上題目的時候用到了位操作,是leetcode中的第29題Divide Two Integers。 一、java的位操作: 位運算表達式由操

JavaCookie常用操作類(Spring操作Cookie)

方法 .net str blog .cn shm efault csdn int 說明:Cookie下用Key取值沒有快速的方法,只能便利循環去取。 import java.util.HashMap; import java.util.Map; import

Java的IO操作 字符流:FileReader和 FileWriter

void contain desc method eno exceptio contains args http FileReader和 FileWriter 讀寫字符串 1 package object.io; 2 3 import java.io.Buff

【轉載】JAVAIO流操作的基本規律總結

reader 對象 作文 若是 gpo 是否 目的 io流 基本 流操作的基本規律:三個明確 1.明確源和目的; 源:輸入流即讀取流 InputStream,Reader 目的:輸出流即寫入流 OutputStream, Writer 2.明確操作的數據是

java一些小知識和面試問題

() set 返回值 初始 cep 裝箱 聲明 數據 允許 抽象類的總結幾點: · 抽象類與普通類相比最大的不同只是在於抽象類之中存在有抽象方法,所以在抽象類之中依 然可以定義屬性、構造方法等 · 抽象類聲明時不允許使用 final,抽象類必須要求有子類,

說出JAVA一些常用的類,包,接口,請各舉5個~~~

jce bsp tar www. clas ext state file get 類:1.java.lang.Object2.java.lang.String3.java.lang.System4.java.io.file5.java.io.FileInputStream包

java的IO操作總結

tps href .net net detail blank io操作 details java https://blog.csdn.net/u012467492/article/details/52972916 https://blog.csdn.net/yczz/art

菜鳥的算法入門java的鏈表操作

給定 color 第一次 即將 != 輸出 運行 原因 clas 從C語言的指針開始,我的算法之路就結束了! 今天為了找個好的實習,不得不撿起來,寫了三年的web,算法落下了太多了 今天在leetcode上刷題,難在了一個簡單的鏈表上,因此記錄一下 題目:給定兩個

Oracle一些典型操作

--查看錶空間及資料檔案 SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files; ----------------------------------------------------------------

Java一些類的方法

Object類 (1)public int hashCode() a:返回該物件的雜湊碼值。預設情況下,該方法會根據物件的地址來計算。 b:不同物件的,hashCode()一般來說不會相同。 但是,同一個物件的hashCode()值肯定相同。 c:不是物件的實際地址值,可以理解為邏

java程式設計入門2 java的四種訪問許可權控制

在java中提供了四種訪問許可權控制:預設訪問許可權(包訪問許可權),public,private以及protected 只有預設訪問許可權(包訪問許可權)和public能用來修飾類(不包括內部類) 修飾變數和方法這四種許可權均可 1.public 修飾類表示該類對其他所有類可見 修飾一個類的變數和

redis常見資料型別操作命令,Java使用Jedis操作Redis

redis常見資料型別操作命令 可參考地址:Http://redisdoc.com/ Java中使用Jedis操作Redis: https://www.cnblogs.com/liuling/p/2014-4-19-04.html redis鍵(key)

Java併發】Java的原子操作

Java中的原子操作 原子更新基本型別 原子更新陣列 原子更新引用型別 原子更新欄位類 參考 原子更新基本型別 一個生動的例子 public class AtomicIntegerExample { privat

Java併發程式設計(十一)Java的原子操作

一、原子操作類簡介 JDK1.5開始提供了java.util.concurrent.atomic包,其中有一系列用法簡單、效能高效、可以執行緒安全更新變數的原子操作類,目前(JDK1.7)大概有這麼些: 二、原子操作類實現原理 以AtomicInteger為例看下原始碼,其中的兩個

Java 的原子操作

寫這篇部落格起源於一道面試題 i++ 是不是原子操作? 那到底什麼是原子操作? 所謂原子操作,就是“不可中斷的一個或一系列操作”。在確認一個操作是原子的情況下,在多執行緒環境裡,我們可以避免僅僅為保護這個操作在外圍加上效能昂貴的鎖,甚至藉助於原子操作,我們可以實現互斥鎖。 Jav

多執行緒學習筆記十三——java的原子操作

當程式更新一個變數時,如果多執行緒同時更新這個變數,可能得到期望之外的值,比如變 量i=1,A執行緒更新i+1,B執行緒也更新i+1,經過兩個執行緒操作之後可能i不等於3,而是等於2。因 為A和B執行緒在更新變數i的時候拿到的i都是1,這就是執行緒不安全