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
}