js-JSON相关介绍

前言

以前写代码的时候,一直搞不清JSON和JavaScript中对象的关系。今天看《高三》的时候,总算弄明白了。

JSON

JSON全称(JavaScript Object Notation,JavaScript 对象表示法),所以JSON和js关系挺大的。本质上JSON是一种数据格式。这里重点要注意的是“数据格式”。之所以叫做JSON,是因为这种格式是基于js的某些语法的。

JSON语法

JS是一种数据格式,这种格式可以用来表示三种类型的值。这三种类型都是从js语法中直接拿过来的。三种类型的值:

  • 简单值 :使用与 JavaScript 相同的语法,可以在 JSON 中表示字符串、数值、布尔值和 null。但 JSON 不支持 JavaScript 中的特殊值 undefined。例如:”str” 、123、false、null是JSON里面的值,undefined不是JSON里面的值
  • 对象:对象作为一种复杂数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。
    例如:
    var json = { “name”:”zhangsan”,”age”:123 }
  • 数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。例如 [1.’222’,null] (和数组类型长得一样)

    注意事项

    1、JSON中没有undefined
    2、JSON在表示对象值的时候,属性必须加双引号
    3、数据和对象可以相互嵌套,对象和数组通常是 JSON 数据结构的最外层形式(当然,这不是强制规定的)
    例如:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    var json = {
    name:"zhangsan" ,//错误,name应该加双引号"name"
    "age": undefined, //错误,JSON中没有undefined
    "personList":[
    {
    "title": "Professional JavaScript",
    "authors": [
    "Nicholas C. Zakas"
    ],
    edition: 3,
    year: 2011
    },
    {
    "title": "Professional JavaScript",
    "authors": [
    "Nicholas C. Zakas"
    ],
    edition: 2,
    year: 2009
    },
    ] //正确,数组和对象可以相互嵌套。
    }

解析与序列化

JSON 对象有两个方法:stringify()和 parse() ,作用和其英文 含义一样。

1
2
3
4
5
6
7
8
9
var book = { 
title: "Professional JavaScript",
authors: [
"Nicholas C. Zakas"
],
edition: 3,
year: 2011
};
var jsonText = JSON.stringify(book);

这个例子使用 JSON.stringify()把一个 JavaScript 对象序列化为一个 JSON 字符串,然后将它保
存在变量 jsonText 中。默认情况下,JSON.stringify()输出的 JSON 字符串不包含任何空格字符或
缩进,因此保存在 jsonText 中的字符串如下所示:
{“title”:”Professional JavaScript”,”authors”:[“Nicholas C. Zakas”],”edition”:3,
“year”:2011}

将 JSON 字符串直接传递给 JSON.parse()就可以得到相应的 JavaScript 值。例如,使用下列代码
就可以创建与 book 类似的对象:
var bookCopy = JSON.parse(jsonText);
注意,虽然 book 与 bookCopy 具有相同的属性,但它们是两个独立的、没有任何关系的对象。
如果传给 JSON.parse()的字符串不是有效的 JSON,该方法会抛出错误。

stringify() 和 parse()的其它用法

这俩个方法都有回调函数,具体用法可以在《高三》中看到。我觉得自己能记住,就不写在了。