标记语言 JSON

JSON 是存储和传输数据的格式,经常在数据传输中使用。

一、什么是 JSON?

JSON 的全称是 JavaScript Object Notation ,是一种通过 JavaScript 对象标记法书写的文本,广泛应用于数据的传输中。

虽然 JSON 的语法来源于 JavaScript 对象的语法,但 JSON 是纯文本,因此可以由任何编程语言处理。

二、JSON 和 XML

共同点:

  • 都是自描述的(人类可读的)
  • 都是分级的(值中有值)
  • 都能被大量编程语言解析和使用
  • 都能被 XMLHttpRequest 读取

差异:

  • JSON 不使用标签
  • JSON 更短
  • JSON 读写速度更快
  • JSON 可以使用数组

三、JSON 与 JavaScript 对象

1
2
var json = '{"name":"xiaozhang", "age":"20"}';
var obj = {name:"xiaozhang", age:"20"};
  • json 的键用引号包裹,且整个 json 也需要用引号包裹(因为它是一个字符串)
  • JavaScript 对象的键不需要用引号包括,且整个对象也不需要用引号包裹

四、JSON 与 JavaScript 数组

几乎完全相同。

五、json 解析为对象

通过 JSON.parse() 解析数据,将数据转化为 JavaScript 对象。

1. 语法

1
var obj = JSON.parse(json)

2. 对象的解析

1
2
3
var json = '{"name":"xiaozhang", "age":"20"}';

var obj = JSON.parse(json);

3. 数组的解析

对于 json 数组使用 JSON.parse() 后,将会返回 JavaScript 数组,而不是 JavaScript 对象。

1
2
3
4
5
6
var json = '{"employees":[' +
'{"firstName":"Bill","lastName":"Gates" },' +
'{"firstName":"Steve","lastName":"Jobs" },' +
'{"firstName":"Elon","lastName":"Musk" }]}';

var obj = JSON.parse(text);

4. 对 json 的检查

可以使用 JSON.parse() 函数的第二个参数 reviver,在其中填入函数,该属性会接收对象中的每一个键和值,并能对其做操作。

六、对象转换为 json

通过 JSON.stringify() 把 JavaScript 对象转换为字符串。

1. 语法

1
var json = JSON.stringify(obj);

2. 对象的转化

1
2
3
4
var obj = {name:"xiaozhang", age:"20"};

var json = JSON.stringify(obj);
// json为 '{"name":"xiaozhang","age":"20"}'

3. 数组的转化

1
2
3
4
var obj = ["Saab", "Volvo", "BMW"];

var json = JSON.stringify(obj);
// json为 '["Saab", "Volvo", "BMW"]'

4. 函数的转换

JSON.stringify() 将会忽略所有函数。

1
2
3
4
var obj =  { "name":"Bill Gates", "age":function () {return 62;}, "city":"Seattle"};

var json = JSON.stringify(obj);
// json为 '{"name":"Bill Gates","city":"Seattle"}'

解决方法:

先将函数转换为字符串,然后再进行转换。

1
2
3
4
var obj = { name: "Bill Gates", age: function () {return 62;}, city: "Seattle" };
obj.age = obj.age.toString();
var json = JSON.stringify(obj);
// json为 '{"name":"Bill Gates","age":"function () {return 62;}","city":"Seattle"}'

5. 时间的转换

JSON 不允许日期对象,JSON.stringify() 函数将把任何日期转换为字符串。

参考