我在维基百科上看了看,在谷歌上搜了搜,也读了官方文档,但我还是没有真正理解JSON是什么,以及为什么要使用它。
我使用PHP、MySQL和Javascript/HTML构建应用程序已经有一段时间了,如果JSON能使我的生活更轻松,或使我的代码更完善,或使我的用户界面更好,那么我想知道它。谁能给我一个简洁的解释?
JSON(JavaScript Object Notation)是一种用于数据交换的轻量级格式。它是基于JavaScript语言的一个子集(对象在JavaScript中的构建方式)。正如MDN所述,有些JavaScript不是JSON,有些JSON也不是JavaScript。 这方面的一个例子是网络服务响应。 在 "旧 "时代,Web服务使用XML作为其传输回馈数据的主要数据格式,但自从JSON出现后(JSON格式在Douglas Crockford的RFC 4627中规定),它一直是首选格式,因为它更轻量级。 你可以在官方JSON网站上找到更多信息。 JSON是建立在两个结构上。
![JSON对象图][4]
[7
[!
[!
下面是一个JSON数据的例子。
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
var x = {x:y}
是不是JSON,这是一个Javascript对象。两者不是一回事。JSON的等价物(用Javascript语言表示)是var x = '{"x": "y"}'。
x'是一个**字符串类型的对象,而不是它本身就是一个对象。要把它变成一个成熟的Javascript对象,你必须先解析它,var x = JSON.parse('{"x": "y"}');
,`x'现在是一个对象,但这不再是JSON。
见Javascript对象与JSON当使用JSON和JavaScript时,你可能会想使用eval
函数来评估回调中返回的结果,但不建议这样做,因为有两个字符(U+2028 & U+2029)在JSON中有效,但在JavaScript中无效(阅读更多这方面的内容here)。
因此,人们必须始终尝试使用Crockford的脚本,在评估JSON之前检查它是否有效。 脚本解释的链接可以在这里找到,这里有一个直接链接的js文件。现在每个主要的浏览器都有自己的实现来实现这个功能。
关于如何使用JSON解析器的例子(使用上述代码片段中的json)。
//The callback function that will be executed once data is received from the server
var callback = function (result) {
var johnny = JSON.parse(result);
//Now, the variable 'johnny' is an object that contains all of the properties
//from the above code snippet (the json example)
alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};
JSON解析器还提供了另一个非常有用的方法,stringify
。 这个方法接受一个JavaScript对象作为参数,并输出一个JSON格式的字符串。 这在你想发送数据回服务器的时候很有用:.
var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}
parse'和
stringify')也需要第二个参数,这个参数是一个函数,它将为最终结果的每一级的每个键和值都被调用,每个值都将被你输入的函数的结果取代。 (更多关于这方面的内容这里)
Btw,对于所有认为JSON只是为JavaScript服务的人来说,请看这篇文章,它解释并证实了事实。常见的简短回答是:如果您使用AJAX进行数据请求,您可以轻松地将对象作为JSON字符串发送和返回。Javascript的现有扩展支持对所有javascript类型的toJSON()调用,用于在AJAX请求中向服务器发送数据。AJAX响应可以将对象作为JSON字符串返回,这些对象可以通过简单的评估调用转换为Javascript对象,例如,如果AJAX函数someAjaxFunctionCallReturningJson返回了
"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"
你可以用Javascript写
var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);
JSON也可用于网络服务的有效载荷等,但对于AJAX的结果,它确实很方便。