程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JSON簡介及Java轉換JSON的方法

JSON簡介及Java轉換JSON的方法

編輯:關於JAVA

本文主要講述如下幾個內容:

1、JSON定義以及JSON的特性

2、如何在JavaScript中解釋JSON格式數據

3、如何在Java代碼中使用JSON(講對象轉換成JSON對象以及解釋JSON字符串)

一、JSON

w3c上對JSON有比較詳細的介紹,鏈接http://www.w3school.com.cn/json/index.asp.下面僅講述重要的幾點。

Json是 JavaScript 對象表示法(JavaScript Object Notation),是輕量級的文本數據交換格式,具有層級結構(值中存在值), 數據可使用 AJAX 進行傳輸,獨立於語言,具有自我描述性,比XML更小更快更容易解析。JSON格式字符串轉化為JavaScript對象無需解析器, JSON 使用 JavaScript 語法,使用JavaScript的eval()函數可生成JavaScript對象。

下面給出JSON格式的數據,非常清晰,無需多做解釋,語法請閱讀官方文檔。

標准JSON格式數據

{ "firstName":"John" , "lastName":"Doe" }

標准JSON格式數組數據

{

"employees": [

{ "firstName":"John" , "lastName":"Doe" },

{ "firstName":"Anna" , "lastName":"Smith" },

{ "firstName":"Peter" , "lastName":"Jones" }

]

}

或直接賦值給變量:

var employees = [

{ "firstName":"Bill" , "lastName":"Gates" },

{ "firstName":"George" , "lastName":"Bush" },

{ "firstName":"Thomas" , "lastName": "Carter" }

];

查看本欄目

二、在JavaScript中解釋JSON數據

JSON 最常見的用法之一,是從 web 服務器上讀取 JSON 數據(作為文件或作為 HttpRequest),將 JSON 數據轉換為 JavaScript 對象,然後在網頁中使用該數據。

下面直接給出代碼示例:

<pre name="code" class="html"><html>  
<head>  
</head>  
<script type="text/javascript">  
function  testjson(){  
      
//Json格式的字符串  
var txt = '{ "employees" : [' +  
'{ "firstName":"Bill" , "lastName":"Gates" },' +  
'{ "firstName":"George" , "lastName":"Bush" },' +  
'{ "firstName":"Thomas" , "lastName":"Carter" } ]}';  
      
//使用eval函數轉換成JSON對象  
//eval() 函數使用的是 JavaScript 編譯器,可解析 JSON 文本,然後生成 JavaScript 對象。必須把文本包圍在括號中,這樣才能避免語法錯誤:  
var obj = eval ("(" + txt   
    + ")");  
//通過對象名,然後根據數組下標以及屬性名取值  
alert(obj.employees[0].firstName);  
}  
      
</script>  
<body>  
    <a href="" onclick="testjson()">Click me!</a>  
</body>  
</html>

直接保存為後綴名為html或htm的文件,用浏覽器打開,就可以測試運行結果了。

三、Java操作JSON

1、Josn-lib

JSON-lib這個Java類包用於把bean,map和XML轉換成JSON並能夠把JSON轉回成bean和DynaBean。

下載地址:http://json-lib.sourceforge.net/

還要需要的第3方包:

rg.apache.commons(3.2以上版本)

org.apache.oronet.sf.

ezmorph(ezmorph-1.0.4.jar)

nu.xom

下面直接給出代碼:

package com.doyeden.json;  
      
import java.util.ArrayList;  
import java.util.HashMap;  
import java.util.List;  
import java.util.Map;  
      
import org.apache.commons.beanutils.PropertyUtils;  
      
import net.sf.json.JSONArray;  
import net.sf.json.JSONObject;  
import net.sf.json.xml.XMLSerializer;  
      
public class TestJson {  
    public static void main(String[] args) {  
      
        // 1. List  
        boolean[] booleanArray = new boolean[] { false, false, true, false };  
        JSONArray ja = JSONArray.fromObject(booleanArray);  
        System.err.println(ja);  
      
        List list = new ArrayList();  
        list.add("first");  
        list.add("second");  
        JSONArray jsonArray2 = JSONArray.fromObject(list);  
        System.out.println(jsonArray2);  
      
        JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']");  
        System.out.println(jsonArray3);  
      
        // 2. Map  
        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 json = JSONObject.fromObject(map);  
        System.out.println(json);  
      
        // 3. JSON Bean  
        JSONObject jsonObject = JSONObject.fromObject(new JsonBean("kevin",  
                "Male"));  
        System.out.println(jsonObject);  
      
        // 4. Json Beans  
        List<JsonBean> lbs = new ArrayList<JsonBean>();  
        JsonBean j1 = new JsonBean("kevin", "Male");  
        JsonBean j2 = new JsonBean("maimai", "Femal");  
        lbs.add(j1);  
        lbs.add(j2);  
        JSONArray ja_beans = JSONArray.fromObject(lbs);  
        System.out.println(ja_beans);  
      
    }  
}

查看本欄目

下面的類的get和set方法必須有才可以

package com.doyeden.json;  
      
public class JsonBean {  
    private String name;  
    private String sex;  
          
    public JsonBean() {  
        super();  
    }  
    public JsonBean(String name, String sex) {  
        super();  
        this.name = name;  
        this.sex = sex;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public String getSex() {  
        return sex;  
    }  
    public void setSex(String sex) {  
        this.sex = sex;  
    }  
          
}

程序運行結果:

[false,false,true,false]  
["first","second"]  
["json","is","easy"]  
{"arr":["a","b"],"int":1,"name":"json","func":function(i){ return this.arr[i]; },"bool":true}  
{"name":"kevin","sex":"Male"}  
[{"name":"kevin","sex":"Male"},{"name":"maimai","sex":"Femal"}]

2、 目前比較流行的fast-json解析 ,更多fast-json請自行查閱文檔

阿裡巴巴FastJson是一個Json處理工具包,包括“序列化”和“反序列化”兩部分,它具備如下特征:

速度最快,測試表明,fastjson具有極快的性能,超越任其他的Java Json parser。包括自稱最快的JackJson;

功能強大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省;無依賴,能夠直接運行在

Java SE 5.0以上版本;支持Android;開源 (Apache 2.0)

Fastjson API入口類是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON類上的靜態方法直接完成。

public static final Object parse(String text); // 把JSON文本parse為JSONObject或者JSONArray

public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject

public static final  T parseObject(String text, Class clazz); // 把JSON文本parse為JavaBean

public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray

public static final  List parseArray(String text, Class clazz); //把JSON文本parse成JavaBean集合

public static final String toJSONString(Object object); // 將JavaBean序列化為JSON文本

public static final String toJSONString(Object object, boolean prettyFormat); // 將JavaBean序列化為帶格式的JSON文本

public static final Object toJSON(Object javaObject); 將JavaBean轉換為JSONObject或者JSONArray。

查看本欄目

實例代碼:

(需要導入fastjson的jar包)

package com.doyeden.json.fastjson;  
      
import java.util.ArrayList;  
import java.util.List;  
      
import com.alibaba.fastjson.JSON;  
import com.doyeden.json.JsonBean;  
      
public class Test {  
    public static void main(String[] args) {  
              
        //1 parse bean to json text  
        JsonBean jb=new JsonBean("kevin","Male");  
        System.out.println(JSON.toJSONString(jb));  
              
        //2 parse list to json array  
        List<JsonBean> ljs=new ArrayList<JsonBean>();  
        JsonBean jb1=new JsonBean("kevin","Male");  
        JsonBean jb2=new JsonBean("maimai","Female");  
        ljs.add(jb2);  
        ljs.add(jb1);  
        System.out.println(JSON.toJSONString(ljs));  
              
        //3 parse json text to bean  
        String s="{\"name\":\"greg\",\"sex\":\"Male\"}";
        JSON jO=JSON.parseObject(s);  
        JsonBean j=JSON.toJavaObject(jO, JsonBean.class);  
        System.out.println(j.getName());  
              
    }  
}

結果:

{"name":"kevin","sex":"Male"}

[{"name":"maimai","sex":"Female"},{"name":"kevin","sex":"Male"}]

greg

3、其他方式,此處略去一萬字。。。

總結:本文講述了JSON格式數據以及如何在JavaScript和Java代碼中操作JSON格式數據,可以發現,因為JSON自解釋性,輕量級,體積小,跨平台等特點,JSON格式數據非常適合作為和後端數據交互的格式。JavaScript本身就可以解釋JSON,這樣就省去了很多第三方庫,java中,關於講JSON轉換成Java對象以及講Java對象和對象數組轉換成JSON格式數據的類庫其實有很多,但是目前來說最快的是fastjson.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved