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"