JSON.parse()
JSON.parse()方法將json字符串轉(zhuǎn)化為Javascript值或?qū)ο蟆?/p>
語法
JSON.parse(text[,reviver])
參數(shù)
text:要被解析成Javascript值的字符串
reviver:若是一個函數(shù)則規(guī)定了原始值(text)如何被解析改造陈肛,在被返回前懂傀。
示例
JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null
使用reviver函數(shù)(解析值本身以及它所包含的所有屬性慎玖,會按照一定的順序:從最最里層的屬性開始一級級往外,最終到達頂層呻待,也就是解析值本身分別的去調(diào)用reviver函數(shù))
JSON.parse('{"p":5,"":100}',function(k,v){
if(k === "") return v;
return v*2;
})
返回:{p:10,"":100}
//從這個例子可以看出遍歷是從內(nèi)往外的打月。
JSON.parse('{"1":1,"2":2,"3":{"4":4,"5":{"6":6}}}',function(k,v){
console.log(k); //輸出當前的屬性名,從而得知遍歷順序是從內(nèi)向外的蚕捉,最后一個屬性名會是個空字符串奏篙。
return v; //返回原始屬性值,相當于沒有傳遞reviver參數(shù)迫淹。
})
返回:1 2 4 6 5 3 ""
JSON.stringify()
JSON.stringify() 方法將一個JavaScript值轉(zhuǎn)換為一個JSON字符串秘通,如果指定了一個replacer函數(shù),則可以替換值敛熬,或者如果指定了一個replacer數(shù)組肺稀,可選的僅包括指定的屬性.
語法
JSON.stringify(value[,replacer[,space]])
參數(shù)
value:將要序列化成 一個JSON字符串的值
replacer:如果該參數(shù)是一個函數(shù),則在序列化過程中应民,被序列化的值的每個屬性都會經(jīng)過該函數(shù)的轉(zhuǎn)換和處理话原;如果該參數(shù)是一個數(shù)組夕吻,則只有包含在這個數(shù)組中的屬性名才會被序列化到最終的 JSON 字符串中;如果該參數(shù)為null或者未提供繁仁,則對象所有的屬性都會被序列化涉馅;
space:指定縮進用的空白字符串,用于美化輸出(pretty-print)改备;如果參數(shù)是個數(shù)字控漠,它代表有多少的空格;上限為10悬钳。該值若小于1,則意味著沒有空格偶翅;如果該參數(shù)為字符串(字符串的前十個字母)默勾,該字符串將被作為空格;如果該參數(shù)沒有提供(或者為null)將沒有空格聚谁。
描述
關(guān)于序列化母剥,有下面五點注意事項:
1.非數(shù)組對象的屬性不能保證以特定的順序出現(xiàn)在序列化后的字符串中。
2.布爾值形导、數(shù)字环疼、字符串的包裝對象在序列化過程中會自動轉(zhuǎn)換成對應(yīng)的原始值。
3.undefined朵耕、任意的函數(shù)以及 symbol 值炫隶,在序列化過程中會被忽略(出現(xiàn)在非數(shù)組對象的屬性值中時)或者被轉(zhuǎn)換成 null(出現(xiàn)在數(shù)組中時)。
4.所有以 symbol 為屬性鍵的屬性都會被完全忽略掉阎曹,即便 replacer 參數(shù)中強制指定包含了它們伪阶。
5.不可枚舉的屬性會被忽略
JSON.stringify({}); // '{}'
JSON.stringify(true); // 'true'
JSON.stringify("foo"); // '"foo"'
JSON.stringify([1, "false", false]); // '[1,"false",false]'
JSON.stringify({ x: 5 }); // '{"x":5}'
JSON.stringify({x: 5, y: 6});
// "{"x":5,"y":6}"
JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);
// '[1,"false",false]'
JSON.stringify({x: undefined, y: Object, z: Symbol("")});
// '{}'
JSON.stringify([undefined, Object, Symbol("")]);
// '[null,null,null]'
JSON.stringify({[Symbol("foo")]: "foo"});
// '{}'
JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]);
// '{}'
JSON.stringify(
{[Symbol.for("foo")]: "foo"},
function (k, v) {
if (typeof k === "symbol"){
return "a symbol";
}
}
);
// undefined
// 不可枚舉的屬性默認會被忽略:
JSON.stringify(
Object.create(
null,
{
x: { value: 'x', enumerable: false },
y: { value: 'y', enumerable: true }
}
)
);
// "{"y":"y"}"
replacer參數(shù)
function replacer(key,value){
if(typeof value === "string"){
return undefined;
}
return value;
}
var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
var jsonString = JSON.stringify(foo,replacer);
返回:{"week":45,"month":7};
//如果replacer是一個數(shù)組,數(shù)組的值代表將被序列化成JSON字符串的屬性名
JSON.stringify(foo,["model","transport"]);
返回: '{"model":"box","transport":"car"}';