我查看了 Wikipedia 并在 Google 上搜索并阅读了官方文档,但我仍然没有真正理解 JSON 是什么,以及我为什么要使用它。
我一直在使用 PHP、MySQL 和 JavaScript / HTML 构建应用程序,如果 JSON 可以做一些事情来让我的生活更轻松,或者我的代码更好,或者我的用户界面更好,那么我想知道它。有人可以给我一个简洁的解释吗?
JSON(JavaScript Object Notation)是一种用于数据交换的轻量级格式。 它基于 JavaScript 语言的一个子集(对象在 JavaScript 中的构建方式)。如MDN 中所述,有些 JavaScript 不是 JSON,有些 JSON 不是 JavaScript。
使用此功能的一个示例是 Web 服务响应。在“旧”时代,Web 服务使用 XML 作为回传数据的主要数据格式,但自从 JSON 出现( Douglas Crockford在 RFC 4627 中指定 JSON 格式 )以来,它一直是首选格式,因为它更多 轻的
您可以在官方JSON 网站上找到更多信息。
JSON 建立在两种结构之上:
以下是 JSON 数据的示例:
{ "firstName": "John", "lastName": "Smith", "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": 10021 }, "phoneNumbers": [ "212 555-1234", "646 555-4567" ] }
JSON(在 Javascript 中)是一个字符串!
人们经常假设所有的 Javascript 对象都是 JSON 并且 JSON 是一个 Javascript 对象。这是不正确的。
在 Javascriptvar x = {x:y}中 不是 JSON ,这是一个 Javascript 对象 。两者不是一回事。JSON 等价物(以 Javascript 语言表示)将是var x = '{"x":"y"}'. x是 字符串 类型的对象,而不是它自己的对象。要将其转换为完全成熟的 Javascript 对象,您必须首先对其进行解析,var x = JSON.parse('{"x":"y"}');,x现在是一个对象,但这不再是 JSON。
var x = {x:y}
var x = '{"x":"y"}'
x
var x = JSON.parse('{"x":"y"}');
使用 JSON 和 JavaScript 时,您可能想使用该eval函数来评估回调中返回的结果,但不建议这样做,因为 JSON 中有两个字符(U+2028 和 U+2029)有效,但在 JavaScript 中无效(在这里阅读更多内容)。
eval
因此,必须始终尝试使用 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 格式的字符串。 当您想要将数据发送回服务器 时,这很有用: __
stringify
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)还带有第二个参数,这是一个函数,将在最终结果的每一级为每个键和值调用,每个值将被您输入的函数的结果替换。(更多关于这里)
parse
顺便说一句,对于那些认为 JSON 仅适用于 JavaScript 的所有人,请查看这篇解释并确认其他情况的帖子。