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

我查看了维基百科,并使用Googlesearch并阅读了官方文档,但是我仍然没有明白JSON是什么,以及为什么要使用它。

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

JSON(JavaScript Object Notation)是一种用于数据交换的轻量级格式。 它基于JavaScript语言的子集(对象使用JavaScript构build的方式)。 正如MDN所述 ,一些JavaScript不是JSON,有些JSON不是JavaScript。


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

你可以在官方的JSON网站上find更多信息。

JSONbuild立在两个结构上:

  • 名称/值对的集合。 在各种语言中,这被实现为对象,logging,结构,字典,散列表,键控列表或关联数组。
  • 有序的值列表。 在大多数语言中,这是作为数组,vector,列表或序列来实现的。

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时,可能会试图使用eval函数来评估callback中返回的结果,但是由于在JSON中有两个字符(U + 2028&U + 2029)有效, JavaScript(阅读更多这里 )。

因此,在评估之前,必须总是尝试使用Crockford的脚本来检查有效的JSON。 链接到脚本说明在这里find,这里是直接链接到JS文件。 现在的每个主stream浏览器都有自己的实现 。

有关如何使用JSONparsing器(使用上述代码片段中的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' }; 

JSONparsing器还提供了另一个非常有用的方法,即stringify 。 该方法接受一个JavaScript对象作为参数,并返回一个JSON格式的string。 这对于您想要将数据发送回服务器很有用

 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 )也取第二个参数,这个参数是最终结果每一个级别的每个键和值所要调用的函数,每个值将被你input函数的结果所替代。 (更多关于这里 )

顺便说一句,对于那些认为JSON只适用于JavaScript的人们来说,看看这个post解释和确认。


参考

  • JSON.org
  • 维基百科
  • Json在3分钟内 (谢谢mson )
  • 在Yahoo!上使用JSON Web服务 (谢谢gljivar )
  • JSON到CSV转换器

简而言之 – JSON是以这种方式序列化的一种方式,即成为JavaScript代码。 在执行时(使用eval或其他方式),此代码将创build并返回一个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更简单,占用的空间更less。 存在许多库,允许您使用JSON序列化和反序列化各种编程语言的对象。

总之,这是一个传递数据的脚本符号。 在某种程度上,XML是一种替代scheme,本地支持基本的数据types,数组和关联数组(名称 – 值对,因为这就是它们所代表的对象)。

语法是在JavaScript中使用的,JSON本身代表“JavaScript Object Notation”。 但是它已经变得可移植并且也被用于其他语言。

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

http://secretgeek.net/json_3mins.asp

JSON是JavaScript对象表示法。 与XML相比,这是一种跨networking连接传输数据集合的更紧凑的方法。 我build议将JSON用于任何类似AJAX的应用程序,否则XML将成为“推荐”选项。 XML的详细程度将增加下载时间和增加的带宽消耗($$$)。 您可以使用JSON完成相同的效果,并且其标记几乎专用于数据本身,而不是基础结构。

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

以上所有答案都集中在具体细节上。 所以我会试着解释一下这个概念,以便你能够理解上面的内容。

什么是JSON? – 我怎么解释给我的妻子

我: “这基本上是与某人交stream的一种方式。 “

妻子: “你是什么意思?”

我: “好吧,想象一下,如果我想和你妈妈沟通 – 通过写你的心。 你觉得我会怎么做?

妻子:那么你会写一封英文信,我想。

我:宾果! 究竟。 我会用英文写一些东西。 而你的母亲大概理解英文。 所以她能够理解我写下来的内容并作出相应的回应。

妻子:那么JSON基本上是写给英文的人呢?

ME:好,但不完全:你看英文有规则:我们有句号,逗号,括号,连字符,撇号,它们都是不同的意思。 基本上我们都有一个共同的协议,一个完整的中止意味着什么,你的母亲在理解我的信的时候会遵守这些规则。

妻子:那么你是说JSON是给别人写英文的一种方式,但是它有双方认同的规则吗?

我:确实! 除了这些规则是非常具体的。 在平淡无奇的英语中,规则相当宽松。 英文写作的规则有点像笼斗:除了一些基本的东西外,你可以做任何你想做的事情:不要咬或者eye眼。 例如,如果我想告诉你的母亲:关于我们的家庭,我可以用几种不同的方式来做到这一点。 注意各方面的差异。

妻子:好的

我:

•例1:我们家有四个人:你,我和两个孩子。

•例2:我们的家庭:你,我,kid1和kid2。

•例3:家庭:[you,me,kid1,kid2]

例四:我们家有四口人:妈妈,爸爸,孩子1和孩子2。

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

我:确实如此。 除了JSON,规则是非常严格的。 你只能以某种方式进行沟通。 你必须遵循这些规则让其他人了解它。

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

我:他们会记得我们正在处理电脑。 电脑是愚蠢的,不能理解句子。 所以当电脑涉及到的时候,我们必须非常具体,否则他们会感到困惑。 另外JSON是一种相当有效的沟通方式,所以大部分不相关的东西都被删除了,这是非常有用的。 如果你想传达我们的家庭,你可以这样做的一种方式是这样的:

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

……这基本上是JSON。 但请记住,您必须遵守JSON语法规则。 如果你用JSON打滑,语法警察将会在你身上。 你不能这样做,因为如果你犯了错误,事情根本就行不通。

妻子:那我怎么写Json?

我:你基本上被迫使用键值对和使用数组进行通信。

妻子:这是什么意思?

我:现在我们正在进入具体的实施细节。 你最好通过阅读上面的答案服务。 我不需要重复他们所说的话,他们在解释这些东西方面做得非常好。

概要

总而言之,JSON基本上是一种将数据传达给某人的方式,具有非常非常特定的规则。 打破这些规则,没有人会明白你在说什么。

我希望这可以帮助你。 如果您有任何问题,请发表评论,我会再次尝试解释。

常见的简短答案是:如果您使用AJAX发出数据请求,则可以轻松地将对象作为JSONstring发送和返回。 Javascript的可用扩展支持所有JavaScripttypes的AJAX()调用,以在AJAX请求中将数据发送到服务器。 AJAX响应可以将对象作为JSONstring返回,可以通过简单的eval调用将其转换为Javascript对象,例如,如果返回AJAX函数someAjaxFunctionCallReturningJson

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

你可以用Javascript编写

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

JSON也可以用于Web服务有效载荷等,但对AJAX结果来说真的很方便。

我喜欢JSON,主要是因为它非常简洁 。 对于可以被压缩的网页内容,这不一定是个大问题(因此为什么x html是如此受欢迎)。 但有些情况下这可能是有益的。

例如,对于一个项目,我正在传输需要序列化并通过XMPP传输的信息。 由于大多数服务器会限制您可以在单个消息中传输的数据量,所以我发现使用JSON而非明显的替代方法是有帮助的。

作为一个额外的好处,如果您熟悉Python或Javascript,那么您已经非常了解JSON,并且可以在没有太多培训的情况下对其进行解释。

什么是JSON?

JavaScript对象表示法(JSON)是一种轻量级的数据交换格式,受JavaScript的对象文字的启发。

JSON值可以包括:

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

JSON是独立于语言的。

JSON与PHP?

在PHP 5.2.0版之后,JSON扩展就是解码和编码function的默认设置。

Json_encode – 返回值的JSON表示Json_decode – 解码JSONstringJson_last_error – 返回最后发生的错误。

JSON语法和规则?

JSON语法是从JavaScript对象表示法语法派生的:

数据在名称/值对中数据由逗号分隔大括号包含对象方括号包含数组

http://www.codingslover.com/2015/05/json-with-php-javascript-and-ajax.html

JSON示例

JSON和常规语法的区别如下(在Javascript中)

常规

  function Employee(name, Id, Phone, email){ this.name = name; this.Id = Id; this.Phone = Phone; this.email = email; } //access or call it as var Emp = new Employee("mike","123","9373849784","mike.Anderson@office.com"); 

用JSON

如果我们使用JSON,我们可以用不同的方式来定义

  function Employee(args){ this.name = args.name; this.Id = args.Id; this.Phone = args.Phone; this.email = args.email; } //now access this as... var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'}); 

我们必须记住的重要的事情是,如果我们必须在没有JSON方法的情况下构build“Employee”类或者100个元素的模式,那么在创build类时就必须parsing所有的东西。 但是对于JSON,我们只能在定义了类的新对象时才能定义内联对象。

所以下面这行是使用JSON做事情的方式(只是一个简单的方法来定义事情)

  var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'}); 

我们必须在大学里做一个项目,我们面临一个很大的问题,那就是所谓的同源政策。 Amog其他的东西,这使得你从Javascript的XMLHttpRequest方法不能向您的网站所在的域以外的域请求。

例如,如果您的网站位于www.example.com上,则无法向www.otherexample.com发送请求。 JSONRequest允许这样做,但是如果该网站允许的话(例如,它有一个以JSON返回消息的Web服务),您将得到JSON格式的结果。 这是你可以使用JSON的一个问题。

这里有一些实用的东西: Yahoo JSON

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

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

JSON(JavaScript对象符号)是用于数据交换/传输的轻量级数据格式。 它在JavaScript中是关键值对。 REST API广泛用于从服务器到客户端的数据传输。 如今许多社交媒体网站正在使用这个。 尽pipe在数据types方面我没有看到像XML那样健壮。 XML具有非常丰富的数据types和XSD。 JSON在这方面有点欠缺。

对于相同数量的string数据,JSON将比XML更轻,因为XML具有所有打开和closures标签等。

试试下面的代码来parsing你的php json响应:read.php

 <script src="jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script> <script type="text/javascript"> $.ajax({ url:'index.php', data:{}, type:"POST", success:function(result) { jsondecoded = $.parseJSON(result); $.each(jsondecoded, function(index, value) { $("#servers").text($("#servers").text() + " " + value.servername); console.log(value.start); console.log(value.end); console.log(value.id); }); }, statusCode: { 404: function() { alert( "page not found" ); } } }); </script> 

server.php

 <?php echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]'; ?>