我已经浏览了维基百科,并用Google搜索并阅读了官方文档,但我仍然没有达到我真正理解JSON是什么的原因,以及为什么我会使用它.
我一直在使用PHP,MySQL和Javascript/HTML构建应用程序,如果JSON可以做些什么来让我的生活更轻松或我的代码更好或我的用户界面更好,那么我想知道它.有人可以给我一个简洁的解释吗?
And*_*ech 634
JSON(JavaScript Object Notation)是一种轻量级格式,用于数据交换. 它基于JavaScript语言的子集(对象在JavaScript中构建的方式).如MDN中所述,某些JavaScript不是JSON,而某些JSON不是JavaScript.
使用它的一个示例是Web服务响应.在旧的时代,Web服务使用XML作为传输数据的主要数据格式,但是由于JSON出现(JSON格式在Douglas Crockford的RFC 4627中指定),它一直是首选格式,因为它更多轻量级
您可以在官方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"
]
}
Run Code Online (Sandbox Code Playgroud)
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了.
使用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'
};
Run Code Online (Sandbox Code Playgroud)
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}
Run Code Online (Sandbox Code Playgroud)
上述两个方法(parse
和stringify
)也采用第二个参数,这个函数将在最终结果的每个级别为每个键和值调用,每个值将被输入函数的结果替换.(更多相关信息)
顺便说一句,对于那些认为JSON仅适用于JavaScript的人,请查看这篇解释和确认的帖子.
BKS*_*eon 56
所有上述答案都集中在细节上.因此,我将尝试解释这个概念,以便您能够理解上述内容.
什么是JSON?- 我是如何向妻子TM解释的
我: "这基本上是一种与写作人沟通的方式......但是有规则.
妻子:是的......?
我:我们以英语为例:我们有规则 - 句号,逗号,括号,连字符,撇号等,它们都意味着不同的东西.基本上我们都同意完全停止意味着什么(即我们应该在阅读时暂停).
妻子:所以你是说JSON是一种向某人写英语的方式,但它有双方同意的规则吗?
我:没错!除了这些规则是非常具体的.在平淡无奇的英语中,规则非常宽松:就像笼子战斗一样:你可以做任何你想做的事情,除了一些基础知识(例如眼睛刨削).例如,如果我想告诉美国国税局关于我们的家庭,我可以使用平淡无奇的英语来做一些不同的事情.注意每种方式的差异:
我:
•示例1:我们的家庭有4个人:您,我和2个孩子.
•例2:我们的家人:你,我,孩子1和孩子2.
•例3:家庭:[你,我,孩子1,孩子2]
•例4:我们家里有4个人:妈妈,爸爸,小孩1和小孩2.
妻子: 好的,我明白了.你可以用英语用不同的方式说同样的话.你可以在这里和那里添加几个单词,这里和那里有一些逗号,每个人都会理解.
我:没错.除JSON外,规则非常严格.您只能以某种方式进行沟通.而且你必须遵循这些规则让别人理解它:括号,某些地方的逗号.
妻子:他们为什么不用简单的英语呢?
我:他们愿意,但请记住我们正在处理电脑.计算机是愚蠢的,无法理解句子.因此,当涉及计算机时我们必须非常具体,否则他们会感到困惑.此外,JSON是一种相当有效的通信方式,因此大多数不相关的东西都被删除了,这很有用.如果你想把我们的家人和计算机联系起来,你可以这样做的一种方式是这样的:
{
"Family" : ["Me", "Wife", "Kid1", "Kid2"]
}
Run Code Online (Sandbox Code Playgroud)
......那基本上就是JSON.但请记住,您必须遵守JSON语法规则.如果你打破这些规则,那么计算机根本就不会理解(即解析)你正在写的东西.
妻子:那我怎么写Json?
我:阅读以上答案的具体细节.简而言之,您必须使用键值对和数组进行通信.
摘要
JSON基本上是一种通过非常非常具体的规则向某人传达数据的方式.
Vil*_*lx- 48
简而言之 - 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.
Run Code Online (Sandbox Code Playgroud)
您可以将其用于多种用途.首先,它是将数据从服务器后端传递到JavaScript代码的一种舒适方式.因此,这通常用于AJAX.
您还可以将它用作独立的序列化机制,这种机制比XML更简单,占用的空间更少.存在许多库,允许您在JSON中为各种编程语言序列化和反序列化对象.
mso*_*son 31
简而言之,它是一种用于传递数据的脚本符号.在某些方面是XML的替代方案,本身支持基本数据类型,数组和关联数组(名称 - 值对,称为对象,因为它们代表的是这些).
语法是在JavaScript中使用的,JSON本身代表"JavaScript Object Notation".然而,它已经变得可移植并且也用于其他语言.
这里有一个有用的细节链接:
http://secretgeek.net/json_3mins.asp
Nol*_*lte 16
JSON是JavaScript Object Notation.与XML相比,它是一种跨网络连接传输数据集的更紧凑的方式.我建议在任何类似AJAX的应用程序中使用JSON,否则XML将成为"推荐"选项.XML的冗长会增加下载时间并增加带宽消耗($$$).您可以使用JSON实现相同的效果,并且其标记几乎专用于数据本身而不是底层结构.
Ste*_*owe 11
常见的简答是:如果您使用AJAX发出数据请求,您可以轻松地将对象作为JSON字符串发送和返回.Javascript支持toJSON()的可用扩展调用所有javascript类型,用于在AJAX请求中向服务器发送数据.AJAX响应可以将对象作为JSON字符串返回,可以通过简单的eval调用将其转换为Javascript对象,例如,如果AJAX函数someAjaxFunctionCallReturningJson返回
"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"
Run Code Online (Sandbox Code Playgroud)
你可以用Javascript写
var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);
Run Code Online (Sandbox Code Playgroud)
JSON也可用于Web服务有效负载等,但它对AJAX结果非常方便.
什么是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对象表示法语法:
数据在名称/值对中数据用逗号分隔卷曲括号保持对象方括号包含数组
小智 5
有时在不需要的地方给出技术性,虽然许多投票最高的答案都是准确的技术性和具体的,但我个人认为它们不像维基百科上的那样更容易理解或简洁,或者官方文档。
我喜欢思考 JSON 的方式正是它的本质——不同语言世界中的一种语言。但是,JSON 与其他语言之间的区别在于,“每个人”都会“说”JSON 以及他们的“母语”。
举一个真实世界的例子,让我们假设我们有三个人。一个人说伊博语作为他们的母语。第二个人想与第一个人互动,但是,第一个人说约鲁巴语作为他们的第一语言。
我们可以做什么?
值得庆幸的是,第三人在我们的例子中长大讲英语,而且还偏偏说话都伊博语和约鲁巴语作为第二语言,因此可以作为前两个人之间的中介作用。
在编程世界中,第一个“人”是 Python,第二个“人”是 Ruby,第三个“人”是 JSON,他恰好能够将 Ruby“翻译”成 Python,反之亦然!显然,这个类比并不完美,但是,作为双语者,我相信这是查看 JSON 如何与其他编程语言交互的一种简单方法。
归档时间: |
|
查看次数: |
510883 次 |
最近记录: |