我已经在维基百科和谷歌上搜索了它,并阅读了官方文档,但我仍然没有真正理解JSON是什么,以及我为什么要使用它。

我已经使用PHP、MySQL和JavaScript / HTML构建了一段时间的应用程序,如果JSON可以让我的生活更轻松,或者让我的代码更好,或者让我的用户界面更好,那么我想知道它。谁能给我一个简洁的解释?


当前回答

什么是JSON?

JavaScript对象表示法(JSON)是一种轻量级的数据交换格式,灵感来自JavaScript的对象文字。

JSON值可以包括:

对象(名称-值对的集合) 数组(值的有序列表) 字符串(双引号) 数字 True、false或null

JSON与语言无关。

JSON和PHP?

在PHP版本5.2.0之后,JSON扩展被默认解码和编码功能。

Json_encode -返回值的JSON表示形式 Json_decode -解码JSON字符串 Json_last_error -返回最后发生的错误。

JSON语法和规则?

JSON语法源自JavaScript对象符号语法:

数据以名称/值对的形式存在 数据之间以逗号分隔 花括号保存对象 方括号包含数组

其他回答

JSON (JavaScript对象表示法)是一种用于数据交换的轻量级格式。它基于JavaScript语言的一个子集(在JavaScript中构建对象的方式)。正如MDN中所述,有些JavaScript不是JSON,有些JSON也不是JavaScript。

使用这种方法的一个例子是web服务响应。在过去,web服务使用XML作为传输回数据的主要数据格式,但自从JSON出现以来(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"
     ]
 }

JavaScript JSON

JSON(在Javascript中)是一个字符串!

人们通常认为所有Javascript对象都是JSON,并且JSON是Javascript对象。这是不正确的。

在Javascript中var x = {x:y}不是JSON,这是一个Javascript对象。这两者不是一回事。JSON的等效值(用Javascript语言表示)是var x = '{"x":"y"}'。X是一个字符串类型的对象,而不是它本身的对象。要把它变成一个完全成熟的Javascript对象,你必须首先解析它,var x = JSON.parse('{"x":"y"}');, x现在是一个对象,但这不再是JSON。

参见Javascript对象Vs JSON


当使用JSON和JavaScript时,你可能会尝试使用eval函数来计算回调返回的结果,但不建议这样做,因为在JSON中有两个字符(U+2028和U+2029)有效,而在JavaScript中无效(在这里阅读更多)。

因此,在计算JSON之前,必须总是尝试使用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)还带有第二个参数,这是一个函数,将在最终结果的每个级别上为每个键和值调用,每个值将被输入函数的结果替换。(更多信息请点击这里)

顺便说一句,对于那些认为JSON只是用于JavaScript的人来说,看看这篇文章,它解释并证实了这一点。


参考文献

JSON.org 维基百科 Json在3分钟内(谢谢mson) 在Yahoo!Web服务(感谢gljivar) JSON到CSV转换器 替代JSON到CSV转换器 JSON Lint (JSON验证器)

JSON是JavaScript对象表示法。与XML相比,它是一种更紧凑的跨网络连接传输数据集的方式。 我建议在任何类似ajax的应用程序中使用JSON,否则XML将是“推荐的”选项。XML的冗长会增加下载时间和带宽消耗($$$)。您可以使用JSON实现同样的效果,而且它的标记几乎专门用于数据本身,而不是底层结构。

JSON(Javascript对象表示法)是一种用于数据交换/传输的轻量级数据格式。它和JavaScript一样是键值对。 REST API广泛用于从服务器到客户端的数据传输。如今,许多社交媒体网站都在使用这种方式。尽管就数据类型而言,我认为它不如XML健壮。XML有非常丰富的数据类型和XSD。JSON在这方面有点欠缺。

对于相同数量的字符串数据,JSON将比XML更轻,因为XML有所有的开始和结束标签,等等…

简而言之,JSON是一种序列化的方式,它变成了JavaScript代码。当执行时(使用eval或其他方式),这段代码创建并返回一个JavaScript对象,其中包含序列化的数据。这是可用的,因为JavaScript允许以下语法:

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
    'StringProperty' : 'Value',
    'IntProperty' : 12,
    'ArrayProperty' : [ 1, 2, 3],
    'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.

您可以将其用于以下几个目的。首先,这是一种将数据从服务器后端传递到JavaScript代码的舒适方式。因此,这在AJAX中经常使用。

还可以将其用作独立的序列化机制,这比XML更简单,占用的空间更少。有许多库允许您对各种编程语言的JSON对象进行序列化和反序列化。

这很简单。JSON代表Java Script对象表示法。可以把它看作是使用XML在软件组件之间传输数据的替代方案。

例如,我最近编写了一些返回JSON的web服务,一些Javascript开发人员随后编写了调用这些服务的代码,并使用以这种格式返回的信息。