赞
踩
JSON只是一种数据格式。很多编程语言都有针对JSON的解析器和序列化器。
JSON的语法可以表示以下三种类型的值。
1. 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和 null 。但JSON不支持特殊值 undefined 。
2. 对象:对象作为一种复杂数据类型,表示的是一组有序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。
3. 数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。
JSON对象有两个方法:stringify() 和 parse() 。在最简单的情况下,这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript值。
JSON.stringify() 除了要序列化的JavaScript对象外,还可以接收另外两个参数,这两个参数用于指定以不同的方式序列化JavaScript对象。
第一个参数是个过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。单独或组合使用这两个参数,可以更全面深入地控制JSON的序列化。
如果过滤器参数是数组,那么 JSON.stringify() 的结果中将只包含数组中列出的属性。
var book = {
"title": "无标题",
"authors": [
"前端精髓"
],
edition: 3,
year: 2011
};
var jsonText = JSON.stringify(book, ["title", "edition"]);
console.log(jsonText)
// {"title":"无标题","edition":3}
如果第二个参数是函数,行为会稍有不同。传入的函数接收两个参数,属性(键)名和属性值。根据属性(键)名可以知道应该如何处理要序列化的对象中的属性。
var book = {
"title": "无标题",
"authors": [
"前端精髓"
],
edition: 3,
year: 2011
};
var jsonText = JSON.stringify(book, function (key, value) {
switch (key) {
case "authors":
return "张三";
case "year":
return 5000;
case "edition":
return undefined;
default:
return value;
}
});
console.log(jsonText)
// {"title":"无标题","authors":"张三","year":5000}
// 返回undefined属性将会删除
JSON.stringify() 方法的第三个参数用于控制结果中的缩进和空白符。如果这个参数是一个数值,那它表示的是每个级别缩进的空格数。
var book = {
"title": "无标题",
"authors": [
"前端精髓"
],
edition: 3,
year: 2011
};
var jsonText = JSON.stringify(book, null, 4);
console.log(jsonText)
{
"title": "无标题",
"authors": [
"前端精髓"
],
"edition": 3,
"year": 2011
}
如果缩进参数是一个字符串而非数值,则这个字符串将在JSON字符串中被用作缩进字符(不再使用空格)。在使用字符串的情况下,可以将缩进字符设置为制表符,或者两个短划线之类的任意字符。
var book = {
"title": "无标题",
"authors": [
"前端精髓"
],
edition: 3,
year: 2011
};
var jsonText = JSON.stringify(book, null, '----');
console.log(jsonText)
{
----"title": "无标题",
----"authors": [
--------"前端精髓"
----],
----"edition": 3,
----"year": 2011
}
点击阅读原文,有一个demo,实现了JSON格式化功能的网站,类似于https://www.json.cn/网站的功能。
完
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。