1. 程式人生 > >JSON.stringify(),JSON.parse()

JSON.stringify(),JSON.parse()

soft 轉化 忽略 引擎 -i null 現在 用法 原始類型

JSON格式

1. 復合類型的值只能是數組或對象,不能是函數、正則表達式對象、日期對象
2. 簡單類型的值只有四種:字符串數值(必須以十進制表示)、布爾值null(不能使用NaN, Infinity, -Infinityundefined)。
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) // "{}"
//對象obja屬性是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}"
//barobj對象的不可遍歷屬性,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()