JSON定義
JSON(JavaScript Object Notation)是一種輕量級的資料交換格式。 人類很容易讀寫。 機器很容易解析和生成。 它基于JavaScript程式設計語言的一個子集,标準ECMA-262第3版 - 1999年12月.JSON是一種完全獨立于語言的文本格式,但使用C語言系列程式員熟悉的約定,包括C語言 ,C ++,C#,Java,JavaScript,Perl,Python等等。 這些屬性使JSON成為理想的資料交換語言。
背景
在JSON出現之前,大家一直用XML來傳遞資料。因為XML是一種純文字格式,是以它适合在網絡上交換資料。XML本身不算複雜,但是,加上DTD、XSD、XPath、XSLT等一大堆複雜的規範以後,任何正常的軟體開發人員碰到XML都會感覺頭大了,最後大家發現,即使你努力鑽研幾個月,也未必搞得清楚XML的規範。
終于,在2002年的一天,道格拉斯·克羅克福特(Douglas Crockford)同學為了拯救深陷水深火熱同時又被某幾個巨型軟體企業長期愚弄的軟體工程師,發明了JSON這種超輕量級的資料交換格式。
由于JSON非常簡單,很快就風靡Web世界,并且成為ECMA标準。幾乎所有程式設計語言都有解析JSON的庫,而在JavaScript中,我們可以直接使用JSON,因為JavaScript内置了JSON的解析。
把任何JavaScript對象變成JSON,就是把這個對象序列化成一個JSON格式的字元串,這樣才能夠通過網絡傳遞給其他計算機。
如果我們收到一個JSON格式的字元串,隻需要把它反序列化成一個JavaScript對象,就可以在JavaScript中直接使用這個對象了。
文法規則
對象表示為鍵值對
資料由逗号分隔
花括号儲存對象
方括号儲存數組
JSON格式有兩個顯著的優點:書寫簡單,一目了然;符合JavaScript原生文法,可以由解釋引擎直接處理,不用另外添加解析代碼。
javascript中常用兩個方法
兩個靜态方法:JSON.stringify()和JSON.parse()。
JSON.stringify方法用于将一個值轉為 JSON 字元串。該字元串符合 JSON 格式,并且可以被JSON.parse方法還原,JSON.parse方法用于将 JSON 字元串轉換成對應的值。
Java使用org.json解析JSON
String jsonStr = "{\"name\":\"hejin\",\"age\":\"24\",\"education\":{\"school\":\"gdut\"}}";
JSONObject orgJson = new JSONObject(jsonStr);
String name = orgJson.getString("name");
String age = orgJson.getString("age");
JSONObject education = orgJson.getJSONObject("education");
String school = education.getString("school");
System.out.println(name + "------" + age + "-------" + school);
System.out.println("---------------------------- JSONArray ---------------------------------");
String jsonArr = "[{\"name\":\"hejin\",\"age\":\"24\",\"education\":{\"school\":\"gdut\"}}" +
",{\"name\":\"huangdi\",\"age\":\"24\",\"education\":{\"school\":\"gdut\"}}]";
JSONArray jsonArray = new JSONArray(jsonArr);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
System.out.println(jsonObject.getString("name"));
}
//另外JSONObject的構造函數還對map和javabean支援,直接new的時候傳map或者javabean就行
Java使用net.sf.json解析JSON
String jsonStr = "{\"name\":\"hejin\",\"age\":\"24\",\"education\":{\"school\":\"gdut\"}}";
JSONObject jsonObject = JSONObject.fromObject(jsonStr);
String name = jsonObject.getString("name");
String age = jsonObject.getString("age");
JSONObject education = jsonObject.getJSONObject("education");
String school = education.getString("school");
System.out.println(name + "------" + age + "-------" + school);
System.out.println("---------------------------- JSONArray ---------------------------------");
String jsonArr = "[{\"name\":\"hejin\",\"age\":\"24\",\"education\":{\"school\":\"gdut\"}}" +
",{\"name\":\"huangdi\",\"age\":\"24\",\"education\":{\"school\":\"gdut\"}}]";
JSONArray jsonArray = JSONArray.fromObject(jsonArr);
for (int i = 0; i < jsonArray.size(); i++) {
System.out.println(jsonArray.getJSONObject(i).getString("name"));
}
Java使用com.alibaba.fastjson解析JSON
String jsonStr = "{\"name\":\"hejin\",\"age\":\"24\",\"education\":{\"school\":\"gdut\"}}";
// 把JSON文本parse為JSONObject或者JSONArray
Object parse = JSON.parse(jsonStr);
// 把JSON文本parse成JSONObject
JSONObject jsonObject = JSON.parseObject(jsonStr);
String jsonArr = "[{\"name\":\"hejin\",\"age\":\"24\",\"education\":{\"school\":\"gdut\"}}" +
",{\"name\":\"huangdi\",\"age\":\"24\",\"education\":{\"school\":\"gdut\"}}]";
// 把JSON文本parse成JSONArray
JSONArray jsonArray = JSON.parseArray(jsonArr);
//将List<Map<String,String>>轉化為json數組
String listJson = JSON.toJSON(lists).toString();
JSONArray jsonArr = JSONArray.parseArray(listJson );
//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。