当前位置:  开发笔记 > 编程语言 > 正文

什么是JSON,为什么我会使用它?

如何解决《什么是JSON,为什么我会使用它?》经验,为你挑选了9个好方法。

我已经浏览了维基百科,并用Google搜索并阅读了官方文档,但我仍然没有达到我真正理解JSON是什么的原因,以及为什么我会使用它.

我一直在使用PHP,MySQL和Javascript/HTML构建应用程序,如果JSON可以做些什么来让我的生活更轻松或我的代码更好或我的用户界面更好,那么我想知道它.有人可以给我一个简洁的解释吗?



1> Andreas Grec..:

JSON(JavaScript Object Notation)是一种轻量级格式,用于数据交换. 它基于JavaScript语言的子集(对象在JavaScript中构建的方式).如MDN中所述,某些JavaScript不是JSON,而某些JSON不是JavaScript.

使用它的一个示例是Web服务响应.在旧的时代,Web服务使用XML作为传输数据的主要数据格式,但是由于JSON出现(JSON格式在Douglas Crockford的RFC 4627中指定),它一直是首选格式,因为它更多轻量级

您可以在官方JSON网站上找到更多信息.

JSON基于两种结构:

名称/值对的集合.在各种语言中,这被实现为对象,记录,结构,字典,散列表,键控列表或关联数组.

有序的值列表.在大多数语言中,这被实现为数组,向量,列表或序列.


JSON结构



JSON对象图

JSON阵列图

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函数来评估回调中返回的结果,但是不建议这样做,因为有两个字符(U + 2028和U + 2029)在JSON中有效但​​在JavaScript中没有(在这里阅读更多内容).

因此,必须始终尝试使用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}

上述两个方法(parsestringify)也采用第二个参数,这个函数将在最终结果的每个级别为每个键和值调用,每个值将被输入函数的结果替换.(更多相关信息)

顺便说一句,对于那些认为JSON仅适用于JavaScript的人,请查看这篇解释和确认的帖子.


参考

JSON.org

维基百科

Json在3分钟内(谢谢mson)

在Yahoo!中使用JSON 网络服务(谢谢gljivar)

JSON到CSV转换器

替代JSON到CSV转换器

JSON Lint(JSON验证器)


对于迂腐的人来说,JSON处理的几个字符与JavaScript不同,这使得它成为一个严格的子集:http://timelessrepo.com/json-isnt-a-javascript-subset
实际上,如果您要在客户端和服务器之间传输数据,我认为小心您的响应大小非常重要.

2> BKSpurgeon..:

所有上述答案都集中在细节上.因此,我将尝试解释这个概念,以便您能够理解上述内容.

什么是JSON?- 我是如何向妻子TM解释的

我: "这基本上是一种与写作人沟通的方式......但是有规则.

妻子:是的......?

我:我们以英语为例:我们有规则 - 句号,逗号,括号,连字符,撇号等,它们都意味着不同的东西.基本上我们都同意完全停止意味着什么(即我们应该在阅读时暂停).

妻子:所以你是说JSON是一种向某人写英语的方式,但它有双方同意的规则吗?

我:没错!除了这些规则是非常具体的.在平淡无奇的英语中,规则非常宽松:就像笼子战斗一样:你可以做任何你想做的事情,除了一些基础知识(例如眼睛刨削).例如,如果我想告诉美国国税局关于我们的家庭,我可以使用平淡无奇的英语来做一些不同的事情.注意每种方式的差异:

我:

•示例1:我们的家庭有4个人:您,我和2个孩子.

•例2:我们的家人:你,我,孩子1和孩子2.

•例3:家庭:[你,我,孩子1,孩子2]

•例4:我们家里有4个人:妈妈,爸爸,小孩1和小孩2.

妻子: 好的,我明白了.你可以用英语用不同的方式说同样的话.你可以在这里和那里添加几个单词,这里和那里有一些逗号,每个人都会理解.

我:没错.除JSON外,规则非常严格.您只能以某种方式进行沟通.而且你必须遵循这些规则让别人理解它:括号,某些地方的逗号.

妻子:他们为什么不用简单的英语呢?

我:他们愿意,但请记住我们正在处理电脑.计算机是愚蠢的,无法理解句子.因此,当涉及计算机时我们必须非常具体,否则他们会感到困惑.此外,JSON是一种相当有效的通信方式,因此大多数不相关的东西都被删除了,这很有用.如果你想把我们的家人和计算机联系起来,你可以这样做的一种方式是这样的:

{
                "Family" :  ["Me", "Wife", "Kid1", "Kid2"] 
}

......那基本上就是JSON.但请记住,您必须遵守JSON语法规则.如果你打破这些规则,那么计算机根本就不会理解(即解析)你正在写的东西.

妻子:那我怎么写Json?

我:阅读以上答案的具体细节.简而言之,您必须使用键值对和数组进行通信.

摘要

JSON基本上是一种通过非常非常具体的规则向某人传达数据的方式.



3> Vilx-..:

简而言之 - 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中为各种编程语言序列化和反序列化对象.



4> mson..:

简而言之,它是一种用于传递数据的脚本符号.在某些方面是XML的替代方案,本身支持基本数据类型,数组和关联数组(名称 - 值对,称为对象,因为它们代表的是这些).

语法是在JavaScript中使用的,JSON本身代表"JavaScript Object Notation".然而,它已经变得可移植并且也用于其他语言.

这里有一个有用的细节链接:

http://secretgeek.net/json_3mins.asp



5> 小智..:

JSON格式通常用于通过网络连接序列化和传输结构化数据.它主要用于在服务器和Web应用程序之间传输数据,作为XML的替代方案.



6> Nolte..:

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



7> Steven A. Lo..:

常见的简答是:如果您使用AJAX发出数据请求,您可以轻松地将对象作为JSON字符串发送和返回.Javascript支持toJSON()的可用扩展调用所有javascript类型,用于在AJAX请求中向服务器发送数据.AJAX响应可以将对象作为JSON字符串返回,可以通过简单的eval调用将其转换为Javascript对象,例如,如果AJAX函数someAjaxFunctionCallReturningJson返回

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

你可以用Javascript写

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

JSON也可用于Web服务有效负载等,但它对AJAX结果非常方便.

更新(十年后):不要这样做,使用JSON.parse



8> Jason Baker..:

我喜欢JSON主要是因为它太简洁了.对于可以被gzip压缩的Web内容,这不一定是一个大问题(因此为什么x html如此受欢迎).但有时候这可能是有益的.

例如,对于一个项目,我正在传输需要序列化并通过XMPP传输的信息.由于大多数服务器将限制您可以在单个消息中传输的数据量,因此我发现在明显的替代XML上使用JSON很有帮助.

作为一个额外的好处,如果您熟悉Python或Javascript,您已经非常了解JSON并且可以在没有经过多少培训的情况下解释它.



9> Elangovan..:

什么是JSON?

JavaScript Object Notation(JSON)是一种轻量级数据交换格式,受JavaScript的对象文字的启发.

JSON值可以包括:

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

JSON与语言无关.

用PHP的JSON?

在PHP V5.2.0之后,JSON扩展将解码并将功能编码为默认值.

Json_encode - 返回值的JSON表示Json_decode - 解码JSON字符串Json_last_error - 返回发生的最后一个错误.

JSON语法和规则?

JSON语法派生自JavaScript对象表示法语法:

数据在名称/值对中数据用逗号分隔卷曲括号保持对象方括号包含数组

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有