日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

JSON以及Java轉(zhuǎn)換JSON的方法

 liuyang_inf 2014-07-04

本文主要講述如下幾個(gè)內(nèi)容:

1、JSON定義以及JSON的特性

2、如何在JavaScript中解釋JSON格式數(shù)據(jù)

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

一、JSON

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

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

下面給出JSON格式的數(shù)據(jù),非常清晰,無需多做解釋,語法請(qǐng)閱讀官方文檔。

標(biāo)準(zhǔn)JSON格式數(shù)據(jù)

{ "firstName":"John" , "lastName":"Doe" }
標(biāo)準(zhǔn)JSON格式數(shù)組數(shù)據(jù)
{
"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數(shù)據(jù)

JSON 最常見的用法之一,是從 web 服務(wù)器上讀取 JSON 數(shù)據(jù)(作為文件或作為 HttpRequest),將 JSON 數(shù)據(jù)轉(zhuǎn)換為 JavaScript 對(duì)象,然后在網(wǎng)頁(yè)中使用該數(shù)據(jù)。

下面直接給出代碼示例:

  1. <pre name="code" class="html"><html>  
  2. <head>  
  3. </head>  
  4. <script type="text/javascript">  
  5. function  testjson(){  
  6.   
  7. //Json格式的字符串  
  8. var txt = '{ "employees" : [' +  
  9. '{ "firstName":"Bill" , "lastName":"Gates" },' +  
  10. '{ "firstName":"George" , "lastName":"Bush" },' +  
  11. '{ "firstName":"Thomas" , "lastName":"Carter" } ]}';  
  12.   
  13. //使用eval函數(shù)轉(zhuǎn)換成JSON對(duì)象  
  14. //eval() 函數(shù)使用的是 JavaScript 編譯器,可解析 JSON 文本,然后生成 JavaScript 對(duì)象。必須把文本包圍在括號(hào)中,這樣才能避免語法錯(cuò)誤:  
  15. var obj = eval ("(" + txt   
  16.     + ")");  
  17. //通過對(duì)象名,然后根據(jù)數(shù)組下標(biāo)以及屬性名取值  
  18. alert(obj.employees[0].firstName);  
  19. }  
  20.   
  21. </script>  
  22. <body>  
  23.     <a href="" onclick="testjson()">Click me!</a>  
  24. </body>  
  25. </html>  

直接保存為后綴名為html或htm的文件,用瀏覽器打開,就可以測(cè)試運(yùn)行結(jié)果了。

三、Java操作JSON

1、Josn-lib

JSON-lib這個(gè)Java類包用于把bean,map和XML轉(zhuǎn)換成JSON并能夠把JSON轉(zhuǎn)回成bean和DynaBean。

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

還要需要的第3方包:

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

org.apache.oronet.sf.

ezmorph(ezmorph-1.0.4.jar)

nu.xom

下面直接給出代碼:

  1. package com.doyeden.json;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import org.apache.commons.beanutils.PropertyUtils;  
  9.   
  10. import net.sf.json.JSONArray;  
  11. import net.sf.json.JSONObject;  
  12. import net.sf.json.xml.XMLSerializer;  
  13.   
  14. public class TestJson {  
  15.     public static void main(String[] args) {  
  16.   
  17.         // 1. List  
  18.         boolean[] booleanArray = new boolean[] { falsefalsetruefalse };  
  19.         JSONArray ja = JSONArray.fromObject(booleanArray);  
  20.         System.err.println(ja);  
  21.   
  22.         List list = new ArrayList();  
  23.         list.add("first");  
  24.         list.add("second");  
  25.         JSONArray jsonArray2 = JSONArray.fromObject(list);  
  26.         System.out.println(jsonArray2);  
  27.   
  28.         JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']");  
  29.         System.out.println(jsonArray3);  
  30.   
  31.         // 2. Map  
  32.         Map map = new HashMap();  
  33.         map.put("name""json");  
  34.         map.put("bool", Boolean.TRUE);  
  35.         map.put("int"new Integer(1));  
  36.         map.put("arr"new String[] { "a""b" });  
  37.         map.put("func""function(i){ return this.arr[i]; }");  
  38.         JSONObject json = JSONObject.fromObject(map);  
  39.         System.out.println(json);  
  40.   
  41.         // 3. JSON Bean  
  42.         JSONObject jsonObject = JSONObject.fromObject(new JsonBean("kevin",  
  43.                 "Male"));  
  44.         System.out.println(jsonObject);  
  45.   
  46.         // 4. Json Beans  
  47.         List<JsonBean> lbs = new ArrayList<JsonBean>();  
  48.         JsonBean j1 = new JsonBean("kevin""Male");  
  49.         JsonBean j2 = new JsonBean("maimai""Femal");  
  50.         lbs.add(j1);  
  51.         lbs.add(j2);  
  52.         JSONArray ja_beans = JSONArray.fromObject(lbs);  
  53.         System.out.println(ja_beans);  
  54.   
  55.     }  
  56. }  

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

  1. package com.doyeden.json;  
  2.   
  3. public class JsonBean {  
  4.     private String name;  
  5.     private String sex;  
  6.       
  7.     public JsonBean() {  
  8.         super();  
  9.     }  
  10.     public JsonBean(String name, String sex) {  
  11.         super();  
  12.         this.name = name;  
  13.         this.sex = sex;  
  14.     }  
  15.     public String getName() {  
  16.         return name;  
  17.     }  
  18.     public void setName(String name) {  
  19.         this.name = name;  
  20.     }  
  21.     public String getSex() {  
  22.         return sex;  
  23.     }  
  24.     public void setSex(String sex) {  
  25.         this.sex = sex;  
  26.     }  
  27.       
  28. }  

程序運(yùn)行結(jié)果:

  1. [false,false,true,false]  
  2. ["first","second"]  
  3. ["json","is","easy"]  
  4. {"arr":["a","b"],"int":1,"name":"json","func":function(i){ return this.arr[i]; },"bool":true}  
  5. {"name":"kevin","sex":"Male"}  
  6. [{"name":"kevin","sex":"Male"},{"name":"maimai","sex":"Femal"}]  
2、 目前比較流行的fast-json解析 ,更多fast-json請(qǐng)自行查閱文檔

阿里巴巴FastJson是一個(gè)Json處理工具包,包括“序列化”和“反序列化”兩部分,它具備如下特征:
速度最快,測(cè)試表明,fastjson具有極快的性能,超越任其他的Java Json parser。包括自稱最快的JackJson;
功能強(qiáng)大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自??;無依賴,能夠直接運(yùn)行在

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

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

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轉(zhuǎn)換為JSONObject或者JSONArray。

  實(shí)例代碼:

(需要導(dǎo)入fastjson的jar包)

  1. package com.doyeden.json.fastjson;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import com.alibaba.fastjson.JSON;  
  7. import com.doyeden.json.JsonBean;  
  8.   
  9. public class Test {  
  10.     public static void main(String[] args) {  
  11.           
  12.         //1 parse bean to json text  
  13.         JsonBean jb=new JsonBean("kevin","Male");  
  14.         System.out.println(JSON.toJSONString(jb));  
  15.           
  16.         //2 parse list to json array  
  17.         List<JsonBean> ljs=new ArrayList<JsonBean>();  
  18.         JsonBean jb1=new JsonBean("kevin","Male");  
  19.         JsonBean jb2=new JsonBean("maimai","Female");  
  20.         ljs.add(jb2);  
  21.         ljs.add(jb1);  
  22.         System.out.println(JSON.toJSONString(ljs));  
  23.           
  24.         //3 parse json text to bean  
  25.         String s="{\"name\":\"greg\",\"sex\":\"Male\"}";  
  26.         JSON jO=JSON.parseObject(s);  
  27.         JsonBean j=JSON.toJavaObject(jO, JsonBean.class);  
  28.         System.out.println(j.getName());  
  29.           
  30.     }  
  31. }  

結(jié)果:

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

3、其他方式,例如 org-lib等,使用方法跟上述兩種方式非常相似。就不做更多介紹了。個(gè)人推薦還是使用fast-json。

總結(jié):本文講述了JSON格式數(shù)據(jù)以及如何在JavaScript和Java代碼中操作JSON格式數(shù)據(jù),可以發(fā)現(xiàn),因?yàn)镴SON自解釋性,輕量級(jí),體積小,跨平臺(tái)等特點(diǎn),JSON格式數(shù)據(jù)非常適合作為和后端數(shù)據(jù)交互的格式。JavaScript本身就可以解釋JSON,這樣就省去了很多第三方庫(kù),java中,關(guān)于講JSON轉(zhuǎn)換成Java對(duì)象以及講Java對(duì)象和對(duì)象數(shù)組轉(zhuǎn)換成JSON格式數(shù)據(jù)的類庫(kù)其實(shí)有很多,但是目前來說最快的是fastjson.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多