我已经在维基百科和谷歌上搜索了它,并阅读了官方文档,但我仍然没有真正理解JSON是什么,以及我为什么要使用它。
我已经使用PHP、MySQL和JavaScript / HTML构建了一段时间的应用程序,如果JSON可以让我的生活更轻松,或者让我的代码更好,或者让我的用户界面更好,那么我想知道它。谁能给我一个简洁的解释?
我已经在维基百科和谷歌上搜索了它,并阅读了官方文档,但我仍然没有真正理解JSON是什么,以及我为什么要使用它。
我已经使用PHP、MySQL和JavaScript / HTML构建了一段时间的应用程序,如果JSON可以让我的生活更轻松,或者让我的代码更好,或者让我的用户界面更好,那么我想知道它。谁能给我一个简洁的解释?
当前回答
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对象表示法(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?-我是怎么跟我老婆解释的
我:“这基本上是一种与人交流的方式....但是有非常具体的规则。
妻子:是的……?
我:用通俗的英语来说,规则是相当宽松的:就像笼斗一样。JSON则不是这样。描述某事有很多种方法:
例1:我们家有4口人:你,我和2个孩子。
例2:我们家:你,我,孩子1和孩子2。
例3:家庭:[你,我,孩子1,孩子2]
例4:我们家有四口人:妈妈,爸爸,孩子1和孩子2。
为什么他们不直接用简单的英语呢?
我:他们会的,但别忘了我们是在和电脑打交道。计算机是愚蠢的,它不可能理解句子。所以当涉及到计算机时,我们必须非常具体,否则它们会混淆。此外,JSON是一种相当有效的通信方式,因此大部分不相关的内容都被删除了,这非常方便。如果你想和电脑交流我们的家庭,你可以这样做:
{
"Family": ["Me", "Wife", "Kid1", "Kid2"]
}
......,基本上就是JSON。但是请记住,您必须遵守JSON语法规则。如果你违反了这些规则,那么计算机将无法理解(即无法解析)你所写的内容。
妻子:那我怎么用Json写呢?
一个好方法是使用json序列化器——这是一个为你做繁重工作的库。
总结
JSON基本上是一种与人通信数据的方式,具有非常非常具体的规则。使用键值对和数组。这是解释的概念,在这一点上,值得阅读上面的具体规则。
在Java上下文中,使用JSON的一个原因可能是,它为Java的Serialization框架提供了一个非常好的替代方案,而Java的Serialization框架(历史上)已被证明存在一些相当严重的漏洞。
Joshua Bloch在第85项“首选Java序列化的替代方案”(Effective Java 3rd Edition)中深入讨论了这一点。
Java的序列化最初的目的是将数据结构转换为易于传输或存储的格式。JSON满足这一要求,没有上面提到的严重漏洞。
尝试下面的代码来解析你的php json响应: read.php
<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"}]';
?>
简而言之,它是一种用于传递数据的脚本符号。在某些方面,它是XML的替代方案,本机支持基本数据类型、数组和关联数组(名称-值对,称为对象,因为这是它们所表示的内容)。
该语法用于JavaScript, JSON本身代表“JavaScript对象表示法”。然而,它已经变得可移植,并在其他语言中使用。
这里有一个有用的详细链接:
http://secretgeek.net/json_3mins.asp