我查看了Wikipedia并对其进行了Google搜索,并阅读了官方文档,但是我仍然没有真正了解JSON是什么以及为什么要使用它的意思。
我一段时间以来一直在使用PHP,MySQL和Javascript / HTML构建应用程序,如果JSON可以使我的生活更轻松,代码更好,用户界面更好,那么我想了解一下。有人可以给我一个简洁的解释吗?
我查看了Wikipedia并对其进行了Google搜索,并阅读了官方文档,但是我仍然没有真正了解JSON是什么以及为什么要使用它的意思。
我一段时间以来一直在使用PHP,MySQL和Javascript / HTML构建应用程序,如果JSON可以使我的生活更轻松,代码更好,用户界面更好,那么我想了解一下。有人可以给我一个简洁的解释吗?
Answers:
JSON(JavaScript对象表示法)是一种轻量级格式,用于数据交换。 它基于JavaScript语言的子集(使用JavaScript构建对象的方式)。如MDN中所述,某些JavaScript不是JSON,而某些JSON不是JavaScript。
使用此示例的一个示例是Web服务响应。在过去,Web服务使用XML作为传输回传数据的主要数据格式,但是自从JSON出现(JSON格式由Douglas Crockford 在RFC 4627中指定)以来,它就成为了首选格式,因为它具有更多的优势。轻巧的
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"
]
}
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
函数来评估回调中返回的结果,但是不建议这样做,因为在JSON中有两个有效的字符(U + 2028&U + 2029),而在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'
};
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?–我如何向妻子TM解释
我: “基本上,这是一种与他人进行书面交流的方式……但是要遵循非常具体的规则。
妻子:是的...?
我:在平淡无奇的英语中,规则非常宽松:就像笼子里的战斗一样。JSON并非如此。有多种描述方式:
•示例1:我们一家有4个人:您,我和2个孩子。
•示例2:我们的家庭:您,我,kid1和kid2。
•示例3:家庭:[您,我,kid1,kid2]
•示例4:我们一家有4个人:妈妈,爸爸,kid1和kid2。
妻子:为什么不只使用普通英语呢?
我:他们会的,但是请记住我们正在处理计算机。电脑很笨,无法理解句子。因此,当涉及到计算机时,我们必须特别明确,否则它们会造成混乱。此外,JSON是一种相当有效的通信方式,因此大部分无关的内容都被删去了,这很简单。如果您想通过计算机与我们的家人交流,您可以采用以下一种方式:
{
"Family" : ["Me", "Wife", "Kid1", "Kid2"]
}
……基本上就是JSON。但是请记住,您必须遵守JSON语法规则。如果您违反了这些规则,那么计算机将根本无法理解(即解析)您所写的内容。
妻子:那我该怎么写杰森?
一个好的方法是使用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对象表示法”。但是,它已经变得可移植,并且也用于其他语言。
一个有用的详细信息链接在这里:
JSON格式通常用于通过网络连接序列化和传输结构化数据。它主要用于在服务器和Web应用程序之间传输数据,作为XML的替代方法。
简短的常见答案是:如果使用AJAX进行数据请求,则可以轻松地以JSON字符串形式发送和返回对象。可用的Javascript扩展支持所有JavaScript类型上的toJSON()调用,以便在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主要是因为它非常简洁。对于可以压缩的Web内容,这并不一定很重要(因此,为什么x html如此流行)。但是在某些情况下这可能是有益的。
例如,对于一个项目,我正在传输需要序列化并通过XMPP传输的信息。由于大多数服务器都会限制您可以在一条消息中传输的数据量,因此我发现在明显的替代XML上使用JSON很有帮助。
另外,如果您熟悉Python或Javascript,就已经非常了解JSON,并且无需任何培训就可以解释它。
什么是JSON?
JavaScript Object Notation(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对象表示法语法:
数据位于名称/值对中数据用逗号分隔括号大括号容纳对象方括号容纳数组
我们必须在大学上做一个项目,我们遇到了一个很大的问题,那就是“同名政策”。另外,它使Javascript中的XMLHttpRequest方法无法向除您网站所在域之外的域发出请求。
例如,如果您的网站位于www.example.com上,则无法向www.otherexample.com发出请求。JSONRequest允许这样做,但是如果该站点允许,您将以JSON格式获得结果(例如,它具有一个以JSON返回消息的Web服务)。那就是您可能使用JSON的一个问题。
这是一些实用的内容:Yahoo 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'});
我们必须记住的重要一点是,如果必须使用100个元素构建“ Employee”类或模态而不使用JSON方法,则在创建类时必须解析所有内容。但是,使用JSON,我们只能在定义该类的新对象时内联定义对象。
因此,下面的这一行是使用JSON进行操作的方式(只是一种简单的定义方式)
var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});
有时,不需要的地方会提供技术性,并且尽管许多获得最高投票的答案都是准确的技术性和特定性,但我个人认为它们不像Wikipedia或上找到的那样更容易理解或简洁。官方文件。
我喜欢JSON的方式就是它的真正含义-一种在不同语言世界中的一种语言。但是,JSON和其他语言之间的区别是“每个人”都“说” JSON,以及它们的“本地语言”。
以一个真实的例子为例,假设我们有三个人。一个人说伊博语是他们的母语。第二个人想与第一人互动,但是,第一人说约鲁巴语是他们的第一语言。
我们能做什么?
值得庆幸的是,在我们的示例中,第三个人长大后会说英语,但同时碰巧同时说了伊博语和约鲁巴语作为第二语言,因此可以充当前两个人之间的中介。
在编程世界中,第一个“人”是Python,第二个“人”是Ruby,第三个“人”是JSON,恰好能够将Ruby“翻译”成Python,反之亦然!现在显然不是一个完美的比喻,但是,作为一个会双语的人,我认为这是查看JSON与其他编程语言交互方式的简便方法。
JSON(Javascript对象表示法)是一种轻量级的数据格式,用于数据交换/传输。它的键值对与JavaScript相同。对于REST API,它广泛用于从服务器到客户端的数据传输。如今,许多社交媒体网站都在使用此功能。尽管就数据类型而言,我认为这不如XML健壮。XML具有非常丰富的数据类型和XSD。JSON有点不足。
对于相同数量的字符串数据,JSON比XML轻一些,因为XML具有所有的开始和结束标签,等等。
尝试以下代码来解析您的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"}]';
?>