標籤:name text 字串 lex 種類型 瀏覽器 fun this string
JSON
關於JSON,最重要的一點是理解它是一種資料格式,不是程式設計語言。
一、文法
JSON 不支援變數、函數或對象執行個體,它就是一種表示結構化資料的格式,雖然與 JavaScript 中表示
資料的某些文法相同,但它並不局限於 JavaScript 的範疇。
JSON文法可以表示下列三種類型的值:
一)簡單值
使用與JavaScript相同的文法,可以在JSON中表示字串、數值、布爾值和null。但沒有undefined。
注意在表示字串時,只能使用雙引號。
二)對象
對象作為一種複雜的資料類型,表示的是一組無序的索引值對。每個索引值對中的值可以是簡單值,也可以是複雜資料類型的值。
//JavaScript對象var person = { name: "Tom", age :19};//與JS對象相比,JSON對象不同的地方://1.不能聲明變數;2.對象的屬性必須加雙引號;3.沒有末尾分號{ "name": "Jerry", "age": "8", "school": { "name": "Nan Shan", "location": "xx00" }}三)數組
數組也是一種複雜資料類型,表示一組有序的值的列表,可以通過數值索引來訪問其中
的值。數組的值也可以是任意類型——簡單值、對象或數組。
//JSON中的數組[22, "Hello", "king"]
[{"title": "Professional JavaScript","authors": ["Nicholas C. Zakas"],edition: 3,year: 2011},{"title": "Professional JavaScript","authors": ["Nicholas C. Zakas"],edition: 2,year: 2009},{"title": "Professional Ajax","authors": ["Nicholas C. Zakas","Jeremy McPeak","Joe Fawcett"],edition: 2,year: 2008}]二、解析與序列化
可以把JSON資料結構解析為JavaScript對象。
一)JSON對象
早期瀏覽器使用eval()函數把JSON解析為JavaScript對象和數組。但使用eval()函數對JSON資料進行轉換存在一定風險,
因為可能會執行一些惡意代碼。所以,建議使用全域對象JSON。
JSON對象的兩個方法:
1)JSON.stringify():把JavaScript對象序列化為JSON字串。
2)JSON.parse與上面相反。
var book = { title: "JavaScript for xx", authors: [‘Price‘, ‘Tom‘, "Alex"], edition: 9, year: 2200 }; var jsonText = JSON.stringify(book); console.log(jsonText); //{"title":"JavaScript for xx", // "authors":["Price","Tom","Alex"],"edition":9,"year":2200} var bookInfo = JSON.parse(jsonText); console.log(bookInfo.authors);
在序列化 JavaScript 對象時,所有函數及原型成員都會被有意忽略,不體現在結果中。此外,值為
undefined 的任何屬性也都會被跳過。
3)toJSON()
var book = { title: "JavaScript for xx", authors: [‘Price‘, ‘Tom‘, "Alex"], edition: 9, year: 2200, toJSON: function () { return this.title; } }; var jsonText = JSON.stringify(book); console.log(jsonText); //"JavaScript for xx"
JavaScript基礎筆記(十一)JSON