JSON格式化数据

JSON格式化数据

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/网站的功能。

JSON格式化数据