什么是JSON,它的用途是什么?

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

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

582375 次浏览

它基于JavaScript语言的一个子集(在JavaScript中构建对象的方式)。像MDN中所述一样,有些JavaScript不是JSON,有些JSON也不是JavaScript。

使用这种方法的一个例子是web服务响应。在过去,web服务使用XML作为传输回数据的主要数据格式,但自从JSON (JSON格式由Douglas Crockford在RFC 4627中指定)出现以来,它已经成为首选格式,因为它更轻量级

你可以在官方JSON网站上找到更多信息。

JSON构建在两个结构上:

  • 名称/值对的集合。在各种语言中,这可以实现为对象、记录、结构、字典、散列表、键控列表或关联数组。
  • 一个有序的值列表。在大多数语言中,这是通过数组、向量、列表或序列来实现的。

JSON结构



< p > # EYZ0

# EYZ0

# EYZ0

# EYZ0

# EYZ0

< / p >

下面是一个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了。

看到# EYZ0


在使用JSON和JavaScript时,您可能会尝试使用eval函数来计算回调中返回的结果,但不建议这样做,因为有两个字符(U+2028 &U+2029)在JSON中有效,但在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}

上面的两个方法(parsestringify)还带有第二个参数,这是一个函数,将在最终结果的每一层对每个键和值进行调用,每个值将被输入函数的结果替换。(更多关于这个在这里)

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


参考文献

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

常见的简短回答是:如果您使用AJAX发出数据请求,您可以轻松地以JSON字符串的形式发送和返回对象。Javascript支持json()的可用扩展调用所有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

我们要做一个关于大学的项目,我们面临一个非常大的问题,叫做同源政策。此外,它使得Javascript中的XMLHttpRequest方法不能向站点所在域以外的域发出请求。

例如,如果你的网站在www.example.com上,你就不能向www.otherexample.com发出请求。JSONRequest允许这样做,但是如果站点允许,您将得到JSON格式的结果(例如,它有一个以JSON返回消息的web服务)。 这是一个你可以使用JSON的问题

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

简而言之,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对象进行序列化和反序列化。

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

该语法用于JavaScript, JSON本身代表“JavaScript对象表示法”。然而,它已经变得可移植,并在其他语言中使用。

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

http://secretgeek.net/json_3mins.asp

# EYZ0。对于可以被gzip压缩的网页内容来说,这并不是什么大问题(因此xhtml如此受欢迎)。但在某些情况下,这是有益的。

例如,对于一个项目,我正在传输需要序列化并通过XMPP传输的信息。由于大多数服务器都会限制您在单个消息中传输的数据量,因此我发现使用JSON比使用XML更有帮助。

作为一个额外的好处,如果你熟悉Python或Javascript,你已经非常了解JSON,并且不需要太多训练就可以解释它。

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

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

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

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");

# EYZ0

如果我们使用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'});

我们必须记住的重要事情是,如果我们必须用100个元素构建“Employee”类或模态,而不使用JSON方法,我们必须在创建类时解析所有内容。但是使用JSON,我们只能在定义类的新对象时内联定义对象。

下面这一行是JSON的处理方式(只是一种简单的定义方式)

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

什么是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一样是键值对。 REST API广泛用于从服务器到客户端的数据传输。如今,许多社交媒体网站都在使用这种方式。尽管就数据类型而言,我认为它不如XML健壮。XML有非常丰富的数据类型和XSD。JSON在这方面有点欠缺

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

概念解释-没有代码或技术术语

什么是JSON?-我是怎么跟我老婆解释的TM

我:“这基本上是一种与人交流的方式....但是有非常具体的规则。

# EYZ0是的……?

在平淡的英语中,规则是相当宽松的:就像笼斗一样。JSON则不是这样。描述某事有很多种方法:

例1:我们家有4口人:你,我和2个孩子。

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

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

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

为什么他们不用简单的英语来代替?

他们会的,但别忘了我们是在和电脑打交道。计算机是愚蠢的,它不可能理解句子。所以当涉及到计算机时,我们必须非常具体,否则它们会混淆。此外,JSON是一种相当有效的通信方式,因此大部分不相关的内容都被删除了,这非常方便。如果你想和电脑交流我们的家庭,你可以这样做:

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

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

那么我如何写在Json?

一个好方法是使用json序列化器——这是一个为你做繁重工作的库。

总结

JSON基本上是一种与人通信数据的方式,具有非常非常具体的规则。使用键值对和数组。这是解释的概念,在这一点上,值得阅读上面的具体规则。

尝试下面的代码来解析你的php json响应: read.php < / p >
<script
src="https://code.jquery.com/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"}]';
?>

有时,在不需要技术细节的地方会给出技术细节,虽然许多投票最多的答案都是准确的技术和具体的,但我个人认为它们并不比维基百科或官方文件上的答案更容易理解或简洁。

我认为JSON就是它的本质——不同语言世界中的一种语言。然而,JSON与其他语言之间的区别在于,“每个人”都会“说”JSON以及他们的“母语”。

用一个真实的例子,让我们假设有三个人。其中一人将伊博语作为他们的母语。第二个人想要与第一个人互动,然而,第一个人把约鲁巴语作为他们的第一语言。

我们能做什么?

值得庆幸的是,我们例子中的第三个人是说英语长大的,但碰巧也会说这两个伊博语和约鲁巴语作为第二语言,因此可以充当前两个人之间的中介。

在编程世界里,第一个“人”是Python,第二个“人”是Ruby,第三个“人”是JSON,他恰好能够将Ruby“翻译”成Python,反之亦然!显然,这个类比并不完美,但是,作为一个会说两种语言的人,我相信这是一种观察JSON如何与其他编程语言交互的简单方法。

在Java上下文中,使用JSON的一个原因可能是,它为Java的Serialization框架提供了一个非常好的替代方案,而Java的Serialization框架(历史上)已被证明存在一些相当严重的漏洞。

Joshua Bloch在第85项“首选Java序列化的替代方案”(Effective Java 3rd Edition)中深入讨论了这一点。

Java的序列化最初的目的是将数据结构转换为易于传输或存储的格式。JSON满足这一要求,没有上面提到的严重漏洞。