一、json语法

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

  • 简单值:可以在json中表示字符串、数值、布尔值和null。但json不支持undefined
  • 对象:对象作为一种复杂数据类型,表示的是一组无序的键值对
  • 数组:数组的值可以是任意类型—简单值、对象或数组

1.简单值

json简单值数据:5 “hello world”

JavaScript字符串和json字符串最大的区别在于,json字符串必须使用双引号

2.对象

json中的对象与JavaScript字面量稍微有一些不同。下面是一个JavaScript中的字面量:

  1. var person = {
  2. name:"Nicholas",
  3. age:29
  4. };

json表示上述对象的方式如下:

  1. {
  2. "name":"Nicholas",
  3. "age":29
  4. }

与JavaScript的对象字面量相比,json对象有两个地方不一样。首先没有声明变量(json中没有变量的概念)。

其次,没有末尾的分号(json末尾不需要分号)。json的对象属性必须加上双引号,这在json中时必须的。

  1. //属性的值可以是简单值,也可以是复杂类型值,因为可以像下面这样在对象中嵌入对象:
  2. {
  3. "name":"Nicholas",
  4. "age":29,
  5. "school":{
  6. "name":"Merrimack College",
  7. "location":"North Andover, MA"
  8. }
  9. }
  10. //这个例子在顶级对象中嵌入了学校信息。虽然有两个"name"属性,但由于它们分别属于不同的对象,因此这样完全没问题。不过同一个对象绝对不应该出现两个同名属性。

3.数组

json中的第二复杂数据类型是数组。json数组采用的就是JavaScript中的数组字面量形式。

  1. //例如,下面是JavaScript中的数组字面量:
  2. var values = [25,"hi",true];
  3. //在json中,可以采用同样的语法表示同一个数组:
  4. [25,"hi",true]

二、解析与序列化

json之所以流行,拥有与JavaScript类似的语法并不是全部原因。更重要的一个原因是,可以把json的数据结构解析为有用的JavaScript对象。在解析JavaScript对象后,只需要下面一行简单的代码就可以取得第三本书的书名:books[2].title

JSON.parse和JSON.stringify

json对象有两个方法,stringify()和parse(),在最简单的情况下,这两个方法分别用于把JavaScript对象序列化为json字符串和把json字符串解析为原生JavaScript值。例如:

  1. //book对象为JavaScript型对象
  2. var book = {
  3. title: "Professional JavaScript",
  4. authors:[
  5. "Nicholas C .zakas"
  6. ],
  7. edition:3,
  8. year:2011
  9. };
  10. //把一个JavaScript对象序列化为一个json字符串,保存在jsonText中
  11. var jsonText = JSON.stringify(book);
  12. /*保存在jsonText中的字符串如下:
  13. {"title":"Professional JavaScript","authors":["Nicholas C .zakas"],"edition":3,"year":2011}*/
  14. //将json字符串直接传递给json.parse()就可以得到相应的JavaScript值。
  15. var bookCopy = JSON.parse(jsonText);
  16. //注意,虽然book与bookCopy具有相同的属性,但是它们是两个独立的,没有任何关系的对象
  17. //JSON.parse()的字符串不是有效的JSON,该方法会抛出错误

三、小结

json是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量。json使用JavaScript语法的子集表示对象、数组、字符串、数组、布尔值和null。即使XML也能表示同样复杂的数据结果,但json没有那么繁琐,而且在JavaScript中使用更便利。

js对象和json对象可以相互转换

  1. json字符串 = JSON.stringify(js对象);
  2. js对象 = JSON.parse(json字符串);