1. 一個對象以「{」 開始, 「}」結束。 每一個「名稱」後跟一個「:」(冒號);「‘名稱/值’ 對」之間運用 「,」(逗號)分隔。 名稱用引號括起來;值若是是字符串則必須用括號,數值型則不需要。例如:前端
var o={"xlid":"cxh","xldigitid":123456,"topscore":2000,"topplaytime":"2009-08-20"};java
2. 數組是值(value)的有序集合。一個數組以「[」開始, 「]」 結束。值之間運用 「,」(逗號)分隔。git
爲了方便地處理JSON數據,JSON提供了json.js包,下載地址:http://www.json.org/json.js通常如今用json2.js。ajax
JSON對象是直接可使用JQuery操做的格式,和js中的對象同樣,能夠用對象(類名)點出屬性(方法)。json
JSON字符串僅僅只是一個字符串,一個總體,不截取的話沒辦法取出其中存儲的數據,不能直接使用,除非你只想alert();後端
在數據傳輸流程中,json是以文本,即字符串的形式傳遞的,而JS操做的是JSON對象,因此,JSON對象和JSON字符串之間的相互轉換是關鍵。例如:數組
JSON字符串:安全
var str1 = '{ "name": "cxh", "sex": "man" }';ide
JSON對象:函數
var str2 = { "name": "cxh", "sex": "man" };
JavaScript 對象表示法(字面量表示法)。
var book = {}; //建立一個沒有屬性的對象
var book = {
name : "The Definitive Guide",
"main title" : "JavaScript", //當屬性名中間有空格,或者"-"時,要用引號把屬性名括起來
author : { //對象的屬性也能夠是對象
firstname : "Rex",
lastname : "Mai
}
};
看起來都是key-value的鍵值對,很像js的對象吧?沒錯,但同時JSON表示不服,我不能跟js的對象長成同樣啊,我得有我本身的個性,因而規定鍵-值對中的鍵必須用雙引號!同時規定鍵-值對中的值的取值有必定要求:
JSON 值能夠是:
數字(整數或浮點數)
字符串(在雙引號中)
邏輯值(true 或 false)
數組(在方括號中)
對象(在花括號中)
null
由JSON字符串轉換爲JSON對象
Eval()
eval() 的參數是一個字符串。若是字符串表示了一個表達式,eval() 會對錶達式求值。若是參數表示了一個或多個 JavaScript 聲明, 那麼 eval() 會執行聲明。
var jsonStr = '{"name": "hanzichi", "sex": "male"}';js自帶的方法
var ans = eval('(' + jsonStr + ')');
console.log(ans.name, ans.sex); // hanzichi male
eval 函數很是快,可是它能夠編譯任何 javascirpt 代碼,這樣的話就可能產生安全的問題。eval 的使用是基於傳入的代碼參數是可靠的假設下,有一些狀況下,可能客戶端是不可信任的。若是基於安全的考慮的話,最好是使用一個JSON解析器(json2.js),一個JSON 解析器將只接受JSON文本,因此是更安全的,以下。
parse(str)
JSON.parse(json字符串 -> json對象)
var jsonStr = '{"name": "hanzichi", "sex": "male"}';
var obj = JSON.parse(jsonStr);
console.log(typeof obj, obj); // object Object {name: "hanzichi", sex: "male"}
parseJSON()
var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );//由JSON字符串轉換爲JSON對象jQuery插件支持的轉換方式:
而後,就能夠這樣讀取:
Alert(obj.name);
傳入一個畸形的JSON字符串會拋出一個異常。好比下面的都是畸形的JSON字符串:
{test: 1} ( test 沒有包圍雙引號)
{'test': 1} (使用了單引號而不是雙引號)
另外,若是你什麼都不傳入,或者一個空字符串、null或undefined,parseJSON都會返回 null 。
注意:若是obj原本就是一個JSON對象,那麼運用 eval()函數轉換後(哪怕是屢次轉換)仍是JSON對象,可是運用 parseJSON()函數處理後會有疑問(拋出語法異常)。
stringify(obj);
JSON.stringify(json對象 -> json字符串)
var obj = {name: 'hanzichi', sex: 'male', age: '10'};
var jsonStr = JSON.stringify(obj);
console.log(jsonStr); // {"name":"hanzichi","sex":"male","age":"10"}
var str2 = { "name": "haorooms", "sex": "man" };
就能夠這樣讀取:
alert(str2.name);
//彈出」 haorooms」。
咱們遇到的JSON不多有這麼簡單的,好比複雜一點的JSON對象如:
var str={"GetUserPostByIdResult":{"Age":"33","ID":"2server","Name":"haorooms"}};
解析用:
alert(str.GetUserPostByIdResult.Name); //彈出haorooms
Gson有2個最基本的方法
1) toJson() – 轉換java 對象到JSON
2) fromJson() – 轉換JSON到java對象
HashMap<String, Object> map=new Gson().fromJson(resultJson, HashMap.class);轉換爲map類型
new Gson().toJson(user).toString()轉化爲json
向前臺發送json字符串
@ResponseBody
public String phoneyanzheng(HttpServletRequest request,HttpServletResponse response) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("msg", info);info爲後臺返回的信息
return new Gson().toJson(map);
}
$.ajax({
type : "POST",
dataType: "json",
url : "${ctx}/bbs/login/getCode",
data : $("#userform").serialize(),//userform爲表單id
success : function(result) {
alert(result.msg)
}
要引入"net.sf.json"包
JSONObject與new Gson()前者側重於存取後者側重於轉換
JSONObject obj = new JSONObject(resultJson);轉化爲json
JSONObject o=(JSONObject) obj.get("data");//獲取
String info=o.getString("errCode");
區別在於JSONObject是一個{}包裹起來的一個對象(Object),
而JSONArray則是[]包裹起來的一個數組(Array),
往JSONArray中添加JSONObject對象。發現JSONArray跟JSONObject的區別就是JSONArray比JSONObject多中括號[]
jsonObj:{"name0":"zhangsan","sex1":"female"}
jsonArray:[{"name":"xuwei","sex":"male"}]