为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

白衣染霜花 2019-06-06 16:08:28

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

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

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


查看完整描述

3 回答

?
慕村9548890

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

其中的一个例子是Web服务响应。在过去,Web服务使用XML作为它们的主要数据格式来传输数据,但是自从JSON出现以来(JSON格式在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对象与JSON


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

因此,在计算JSON之前,必须始终尝试使用Crocford的脚本来检查有效的JSON。找到脚本解释的链接。这里这里有一个直接链接到js文件。现在每个主流浏览器都有它本身的执行情况为了这个。

关于如何使用JSON解析器的示例(使用上面代码片段中的json):

//The callback function that will be executed once data is received from the servervar 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的人来说,看看这个职位这就解释并证实了另一种说法。


参考文献


查看完整回答
反对 回复 2019-06-06
?
ABOUTYOU

以上所有的答案都集中在细节上。所以我试着解释一下概念所以你可以理解上面的内容。

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

我:“这基本上是一种以书面形式与某人交流的方式.但是要遵守规则。

妻子:是的.?

我:让我们以英语为例:我们有规则-句号、逗号、括号、连字符、撇号等等-它们都有不同的含义。基本上,我们都同意句号是什么意思(也就是说,当我们读到一个句号时,我们应该停下来)。

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

我:一点儿没错!但这些规则非常具体。在平淡无奇的英语中,规则是相当宽松的:就像笼斗一样:你可以做任何你想做的事,除了一些基本的东西(比如挖眼)。例如,如果我想告诉国税局关于我们家的事情,我可以用几种不同的普通英语来做。注意每种方式的不同之处:

我:

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

例2:我们的家庭:你,我,孩子1和孩子2。

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

例4:我们家里有4个人:妈妈,爸爸,孩子1和孩子2。

妻子:好的,我知道了。在英语中,你可以用很多不同的方式说同样的话。你可以到处加几个词,这里加几个逗号,每个人都会明白。

我:一点儿没错。除了在JSON中,规则是非常限制性的。你只能以某种方式交流。你必须遵循这些规则,别人才能理解它:括号,在某些地方的逗号。

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

我:他们会的,但记住我们是在处理电脑。计算机是愚蠢的,无法理解句子。因此,我们必须非常具体,当涉及到计算机时,否则他们会感到困惑。此外,JSON是一种相当有效的通信方式,所以大部分无关的内容都被删除了,这是一种很好的方法。如果你想和我们的家人交流,和电脑沟通,你可以这样做:

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

……这基本上是JSON。但是请记住,您必须遵守JSON语法规则。如果你违反了这些规则,那么计算机就无法理解(即解析)你在写什么。

妻子:我怎么用Json写?

我:阅读上面的答案,了解细节。简而言之,您被迫使用键值对和数组进行通信。

摘要

JSON基本上是一种向某人传递数据的方式,有非常、非常具体的规则。


查看完整回答
反对 回复 2019-06-06
?
慕函数4003404

简而言之,JSON是一种以这种方式序列化的方式,使其成为JavaScript代码。在执行时(不管是否使用val),这段代码创建并返回一个JavaScript对象,该对象包含您序列化的数据。这是可用的,因为JavaScript允许以下语法:

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elementsvar 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中的对象。


查看完整回答
反对 回复 2019-06-06

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信