JSON语法
JSON三种类型值
- 简单值:使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null。但JSON不支持JavaScript的特殊值undefined.
如JSON表示字符串的方式:
Hello World!
- 对象:对象作为一种复杂数据类型,表示的是一组无序的键值对儿。而每个键值对儿中的值可以是简单值,也可以是复杂数据类型的值。
JSON中的对象与JavaScript字面量稍微有一些不同。下面是JavaScript中的对象表示方法:
var person = {
name: "HuangAn",
age: 23
};
JSON的表示法如下:
{
"name": "HuangAn",
"age": 23
}
- 数组:数组也是一种复杂数据类型,表示一组有序值列表,可以通过索引来访问数组元素,数组的值可以是简单值、对象或数组。
注意:JSON数组也没有变量和分号。如下所示:
[
{
"title": "professional JavaScript",
"authors": [
"Nicholas"
],
edition: 3,
year: 2011
},
{
"title": "professional Ajax",
"authors": [
"Nicholas",
"Joe Fawcett"
],
edition: 2,
year: 2008
}
]
JSON解析与序列化
JSON之所以流行,是因为它可以把JSON数据结构解析为有用的JavaScript对象。与XML数据结构要解析成DOM文档而且从中提取数据极为麻烦相比,JSON可以解析成JavaScript对象的优势极为明显。
JSON对象
JSON解析器基本上是使用JavaScript的eval()函数,因此eval()函数可以解析、解释并返回JavaScript对象和数组。JSON对象有两个方法:stringify()和parse()。在简单情况下,这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript值。这两个函数是逆序的过程。
如:
var book = {
title: "professional JavaScript",
authors:
[
"Nicholas"
],
edition: 3,
year: 2011
};
var jsonText = JSON.stringify(book);
最后的结果是JSON字符串,如下所示:
{
“title”: "professional JavaScript",
“authors”:
[
"Nicholas"
],
“edition”: 3,
“year”: 2011
}
而JSON.parse()方法则是相反的过程。
序列化选项
实际上,JSON.stringify()除了要序列化JavaScript对象之外,还可以接收另外两个参数。第一个参数是一个过滤器,可以使一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中保留缩进。示例分别如下:
1、过滤结果
var jsonText = JSON.stringify(book,["title","edition"]);
{“title”:"professional JavaScript","edition"3}
2、字符串缩进
var jsonText = JSON.stringify(book,null,"- -");
{
--“title”: "professional JavaScript",
-- “authors”: [
---- "Nicholas"
--],
--“edition”: 3,
--“year”: 2011
}