JSON 對象正則表達式
JSON (JavaScript Object Notation 的縮寫)json
也是一種數據,是 JavaScript 的原生對象,用來處理 JSON 格式數據。它有兩個靜態方法:JSON.stringify()
和 JSON.parse()
數組
是一種無序的屬性名和屬性值的集合,用於網站的先後臺交互。函數
var p = { name: '周杰倫', age: 40 }; var jsonObj = { "name":"陶喆", "age":"45", "gender":"true", };
// 發送
var jsonStr = JSON.stringify(jsonObj); //
// 接收
var jsonObj = JSON.parse(jsonStr); //
// for...in...遍歷 json對象
for var k in jsonObj{
console
}
JSON.parse
方法還原JSON.stringify('foo') === "foo" // false JSON.stringify('foo') === "\"foo\"" // true //字符串foo,被轉成了"\"foo"\"。 // 這是由於未來還原的時候,內層雙引號可讓 JavaScript 引擎知道,這是一個字符串,而不是其餘類型的值 JSON.stringify(false); // "false" // 因爲沒有內層雙引號,因此原始值是布爾,而不是字符串 JSON.stringify('false'); // "\"false\""
undefined
、函數或 XML 對象,該屬性會被 JSON.stringify
過濾undefined
、函數或 XML 對象,則這些值被轉成 null
var obj = {}; Object.defineProperties(obj, { 'foo': { value: 1, enumerable: true }, 'bar': { value: 2, enumerable: false } }); JSON.stringify(obj); // "{"foo":1}"
var obj = { 'prop1': 'value1', 'prop2': 'value2', 'prop3': 'value3' }; var selectedProperties = ['prop1', 'prop2']; JSON.stringify(obj, selectedProperties); //{"prop1":"value1","prop2":"value2"}"
JSON.stringify
的返回值undefined
或沒有返回值,則該屬性會被忽略o
function f(key, value) { if (typeof value === "number") { value = 2 * value; } return value; } JSON.stringify({ a: 1, b: 2 }, f); // '{"a": 2,"b": 4}'
JSON.stringify({ p1: 1, p2: 2 }, null, 2); /* "{ "p1": 1, "p2": 2 }" */ JSON.stringify({ p1:1, p2:2 }, null, '|-'); /* "{ |-"p1": 1, |-"p2": 2 }" */
toJSON
方法的一個應用是,將正則對象自動轉爲字符串。JSON.stringify
默認不能轉換正則對象,可是設置了toJSON
方法之後,就能夠轉換正則對象了
var obj = { reg: /foo/ }; // 不設置 toJSON 方法時 JSON.stringify(obj) // "{"reg":{}}" // 設置 toJSON 方法時 RegExp.prototype.toJSON = RegExp.prototype.toString; JSON.stringify(/foo/) // ""/foo/""
JSON.parse
方法將報錯JSON.parse
方法放在try...catch
代碼塊中
try { JSON.parse("'String'"); } catch(e) { console.log('parsing error'); }
JSON.stringify
方法相似
function f(key, value) { if (key === 'a') { return value + 10; } return value; } JSON.parse('{"a": 1, "b": 2}', f); // {a: 11, b: 2}