JSON.parse(text[, reviver])
其中各個引數的含義如下:JSON.parse('[1,2,3,true]'); // Array [1, 2, 3, true] JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14} JSON.parse('true'); // true JSON.parse('123.45'); // 123.45JSON.parse() 函數還可以接收一個函數,用來處理 JSON 字串中的每個屬性值。當屬性值為一個陣列或者物件時,陣列中的每個元素或者物件的每個屬性都會經過 reviver 引數對應的函數處理。執行的順序是從最內層開始,按照層級順序,依次向外遍歷。
var jsonStr = '{"name":"kingx","age":15,"address":"北京市","interest":["basketball", "football"],"children":[{"name":"kingx2","age":20}],"email":"[email protected]"}'; var result = JSON.parse(jsonStr, function (key, value) { if (key === 'name') { return value + '同學'; } if (key === 'age') { return value * 2; } return value; }); console.log(result);輸出的結果如下所示:
{ name: 'kingx同學', age: 30, address: '北京市', interest: ['basketball', 'football'], children: [{ name: 'kingx2同學', age: 40 }], email: '[email protected]' }通過結果可以看出,解析後的 name 屬性的值都加上了“同學”,age 屬性的值都乘以了 2。當使用 JSON.parse() 函數解析 JSON 字串時,需要注意兩點:
var json = '{"name":"kingx"}'; // 這個是正確的JSON格式 var json = "{\"name\":\"kingx\"}"; // 這個也是正確的JSON格式 var json = '{name:"kingx"}'; // 這個是錯誤的JSON格式,因為屬性名沒有用雙引號括起來 var json = "{'name':'kingx'}"; //這個也是錯誤的JSON格式,屬性名應該用雙引號括起來,而它用了單引號
JSON.parse("[1, 2, 3, 4, ]"); // 解析異常,陣列最後一個元素後面出現逗號 JSON.parse('{"foo" : 1, }'); // 解析異常,最後一個屬性值後面出現逗號
eval("(" + str + ")")
其中,str 表示待處理的字串。var json1 = '{"name":"kingx"}'; var json2 = '{"address":["beijing","shanghai"]}'; console.log(eval("(" + json1 + ")"));// {name: "kingx"} console.log(eval("(" + json2 + ")"));// {address: ["beijing", "shanghai"]}