JavaScript 对象与 JSON 对象的相互转换_js json转换_latency_cheng的博客-CSDN博客

来源: JavaScript 对象与 JSON 对象的相互转换_js json转换_latency_cheng的博客-CSDN博客

一、全局JSON对象
ES5定义了全局对象JSON,对解析JSON的行为制定了规范。
JSON对象有两个方法:stringify() 和 parse()。

二、JavaScript 对象序列化为 JSON对象
JSON.stringify( js对象 [, 过滤器] [, 选项])
二三参数可选,js对象中的函数和原型成员将被忽略,值为undefined的属性也被跳过。
默认情况下,返回的JSON不包含任何空格字符和缩进。
var book = {
title: “Professional JavaScript”,
authors: [“Nicholas C. Zakas”],
edition: 3,
year: 2011
};

var jsonText = JSON.stringify(book);

过滤器为数组:JSON.stingify() 的结果只包含数组中列出的属性。
var book = {
title: “Professional JavaScript”,
authors: [“Nicholas C. Zakas”],
edition: 3,
year: 2011
};

var jsonText = JSON.stringify(book, [“title”, “edition”]);
jsonText的值为 {“title”: “Professional JavaScript”, “edition”: 3}

过滤器为函数:函数接收两个参数,键名和值(key, value)。函数体中根据键名处理对应的值。
var book = {
title: “Professional JavaScript”,
authors: [“Nicholas C. Zakas”],
edition: 3,
year: 2011
};

var jsonText = JSON.stringify(book, function(key, value){
switch(key){
case “authors”:
return value.join(“,”)
case “year”:
return 5000;
case “edition”:
return undefined;
default:
return value;
}
});
序列化后的 jsonText 值为:{“title”: “Professional JavaScript”, “authors”: “Nicholas C. Zakas”, “year”: 5000}

第三个参数用于控制结果的缩进:
参数为数值 —– 表示缩进的空格数。
var book = {
title: “Professional JavaScript”,
authors: [“Nicholas C. Zakas”],
edition: 3,
year: 2011
};

var jsonText = JSON.stringify(book, null, 4);
jsonText 中的字符串:
{
“title”: “Professional JavaScript”,
“authors”: [
“Nicholas C. Zakas”
],
“edition”: 3,
“year”: 2011
}

参数为字符串 —– 表示使用该字符串进行缩进。
var book = {
title: “Professional JavaScript”,
authors: [“Nicholas C. Zakas”],
edition: 3,
year: 2011
};

var jsonText = JSON.stringify(book, null, ” – -“);
jsonText 中的字符串:
{
–“title”: “Professional JavaScript”,
–“authors”: [
—-“Nicholas C. Zakas”
–],
–“edition”: 3,
–“year”: 2011
}

(还可以为对象定义 toJSON() 方法,实现对其进行自定义序列化的需求。)

三、JSON对象解析为 JavaScript 对象
JSON.parse(json对象 [, 还原函数])
还原参数接收两个参数,键和值。如果返回undefined,则表示从结果中删除相应的键;如果返回其他值,则将该值插入到结果中。
var book = {
title: “Professional JavaScript”,
authors: [“Nicholas C. Zakas”],
edition: 3,
year: 2011,
releaseDate: new Date(2011, 11, 1)
};

var jsonText = JSON.stringify(book);
var bookCopy = JSON.parse(jsonText, function(key, value){
if (key == “releaseDate”){
return new Date(value);
} else {
return value;
}
});
————————————————
版权声明:本文为CSDN博主「latency_cheng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/latency_cheng/article/details/73468205

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏