JSON.stringify(),JSON.parse()
阿新 • • 發佈:2017-10-24
soft 轉化 忽略 引擎 -i null 現在 用法 原始類型
JSON格式
1. 復合類型的值只能是數組或對象,不能是函數、正則表達式對象、日期對象。
2. 簡單類型的值只有四種:字符串、數值(必須以十進制表示)、布爾值和null(不能使用NaN, Infinity, -Infinity和undefined)。
3. 字符串必須使用雙引號表示,不能使用單引號。
4. 對象的鍵名必須放在雙引號裏面。
5. 數組或對象最後一個成員的後面,不能加逗號。
空數組和空對象都是合格的JSON值,null本身也是一個合格的JSON值
JSON.stringify()
用於將一個值轉為字符串。該字符串符合 JSON 格式,並且可以被JSON.parse方法還原。
JSON.stringify(‘abc‘) // ""abc""
JSON.stringify(1) // "1"
JSON.stringify(false) // "false"
JSON.stringify([]) // "[]"
JSON.stringify({}) // "{}"
JSON.stringify([1, "false", false]) // ‘[1,"false",false]‘
JSON.stringify({ name: "張三" }) // ‘{"name":"張三"}
//上面代碼將各種類型的值,轉成 JSON 字符串。
需要註意的是,對於原始類型的字符串,轉換結果會帶雙引號。
JSON.stringify(‘foo‘) === "foo" // false JSON.stringify(‘foo‘) === "\"foo\"" // true
//字符串foo,被轉成了""foo""
//這是因為將來還原的時候,雙引號可以讓 JavaScript 引擎知道,foo是一個字符串,而不是一個變量名。
如果原始對象中,有一個成員的值是undefined、函數或 XML 對象,這個成員會被過濾。
var obj = {
a: undefined,
b: function () {}
};
JSON.stringify(obj) // "{}"
//對象obj
的a
屬性是undefined
,而b
屬性是一個函數,結果都被JSON.stringify
過濾。
如果數組的成員是undefined
、函數或 XML 對象,則這些值被轉成null
。
var arr = [undefined, function () {}];
JSON.stringify(arr) // "[null,null]"
//數組arr
的成員是undefined
和函數,它們都被轉成了null
。
正則對象會被轉成空對象。
JSON.stringify(/foo/) // "{}"
JSON.stringify
方法會忽略對象的不可遍歷屬性。
註:不可遍歷屬性現在還不懂,百度半天都還是不知道。。。。
var obj = {};
Object.defineProperties(
obj, {
‘foo‘: {
value: 1,
enumerable: true
},
‘bar‘: {
value: 2,
enumerable: false
}
});
JSON.stringify(obj); // "{"foo":1}"
//bar
是obj
對象的不可遍歷屬性,JSON.stringify
方法會忽略這個屬性。
JSON.parse()
JSON.parse
方法用於將JSON字符串轉化成對象。
JSON.parse(‘{}‘) // {}
JSON.parse(‘true‘) // true
JSON.parse(‘"foo"‘) // "foo"
JSON.parse(‘[1, 5, "false"]‘) // [1, 5, "false"]
JSON.parse(‘null‘) // null
var o = JSON.parse(‘{"name": "張三"}‘);
o.name // 張三
如果傳入的字符串不是有效的JSON格式,JSON.parse
方法將報錯。
JSON.parse("‘String‘") // illegal single quotes
// SyntaxError: Unexpected token ILLEGAL
//雙引號字符串中是一個單引號字符串,因為單引號字符串不符合JSON格式,所以報錯。
為了處理解析錯誤,可以將JSON.parse
方法放在try...catch
代碼塊中。
JSON.parse
方法可以接受一個處理函數,用法與JSON.stringify
方法類似。
function f(key, value) {
if (key === ‘‘){
return value;
}
if (key === ‘a‘) {
return value + 10;
}
}
var o = JSON.parse(‘{"a":1,"b":2}‘, f);
o.a // 11
o.b // undefined
JSON.stringify(),JSON.parse()