# JSON

JSON是一种数据格式,而不是一种编程语言。并不只是JavaScript才使用JSON,很多编程语言都具有针对JSON的解析器和序列化器

# 语法

JSON的语法可以表示为以下三种类型的值

  • 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null,但不支持undefined
  • 对象:一组无序的键值对
  • 数组:一组有序值的列表

JSON不支持变量,函数或者对象实例

# 简单值

JavaScript字符串和JSON字符串最大的区别就是:JSON字符串必须使用双引号

# 对象

JSON中的对象与JavaScript中字面量稍微有一些不同

var person = {
  name: 'sialvsic',
  age: 29
};

JSON中的对象要求给属性加上引号,同时:不需要声明变量和分号

{
  "name": 'sialvsic',
  "age": 29
}

# 数组

JSON数组

[
  {
    "name": 'sialvsic',
    "age": 24,
    "food": ['apple', 'pear']
  },
  {
    "name": 'star',
    "age": 25
  },
]

# 解析和序列化

JSON对象有两个方法:

  • stringify() 把JavaScript对象序列化为JSON字符串
  • parse() 把JSON字符串解析为原生JavaScript值

# stringify

序列化的过程中,所有的函数以及原型成员都会被忽略,值为undefined的任意属性也会被跳过

const person = {
  name: 'sialvsic',
  age: 29,
  school: {
    name: 'baojizhongxue',
    location: 'baoji'
  }
};

//stringify
JSON.stringify(person);
=>
"{"name":"sialvsic","age":29,"school":{"name":"baojizhongxue","location":"baoji"}}"

stringify支持传入第二个参数(过滤器),第三个参数

  • stringify(JavaScript对象, filter, )

# parse

//parse
JSON.parse(JSON.stringify(person););
=>
{
  name: 'sialvsic',
  age: 29,
  school: {
    name: 'baojizhongxue',
    location: 'baoji'
  }
}

或者:
const string = "{\"name\":\"sialvsic\",\"age\":29,\"school\":{\"name\":\"baojizhongxue\",\"location\":\"baoji\"}}";
JSON.parse(string);
陕ICP备20004732号-3