什么是JSON?我为什么要使用它?
我看过维基百科,用谷歌搜索了一下,并阅读了官方文档,但我还没有真正理解JSON是什么,以及我为什么要使用它 我已经使用PHP、MySQL和Javascript/HTML构建了一段时间的应用程序,如果JSON可以让我的生活更轻松、代码更好、用户界面更好,那么我想了解一下。有人能给我一个简洁的解释吗?JSON(JavaScript对象表示法)是一种用于数据交换的轻量级格式。它基于JavaScript语言的一个子集(JavaScript中构建对象的方式)。例如,有些JavaScript不是JSON,有些JSON不是JavaScript web服务响应就是使用这种方法的一个例子。在“旧”时代,web服务使用XML作为其主要数据格式来传输回数据,但自从JSON出现(JSON格式由Douglas Crockford指定)以来,它一直是首选格式,因为它更轻量级 你可以在官方网站上找到更多信息 JSON构建在两种结构上:什么是JSON?我为什么要使用它?,json,Json,我看过维基百科,用谷歌搜索了一下,并阅读了官方文档,但我还没有真正理解JSON是什么,以及我为什么要使用它 我已经使用PHP、MySQL和Javascript/HTML构建了一段时间的应用程序,如果JSON可以让我的生活更轻松、代码更好、用户界面更好,那么我想了解一下。有人能给我一个简洁的解释吗?JSON(JavaScript对象表示法)是一种用于数据交换的轻量级格式。它基于JavaScript语言的一个子集(JavaScript中构建对象的方式)。例如,有些JavaScript不是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
是类型为string的对象,本身不是对象。要将其转换为一个成熟的Javascript对象,必须首先解析它,var x=JSON.parse(“{”x:“y”}”)
,x
现在是一个对象,但不再是JSON
看
在使用JSON和JavaScript时,您可能会尝试使用
eval
函数来计算回调中返回的结果,但不建议这样做,因为有两个字符(U+2028和U+2029)在JSON中有效,但在JavaScript中无效(请阅读更多内容)
因此,必须始终尝试使用Crockford的脚本,在评估之前检查有效的JSON。找到了脚本解释的链接,下面是js文件的链接。现在每个主流浏览器都有这样的功能
关于如何使用JSON解析器的示例(使用上述代码段中的JSON):
JSON解析器还提供了另一种非常有用的方法,stringify
。此方法接受JavaScript对象作为参数,并输出一个JSON格式的字符串。当您要将数据发送回服务器时,这非常有用:
上述两种方法(parse
和stringify
)也采用了第二个参数,这是一个函数,将在最终结果的每个级别为每个键和值调用,每个值都将被输入函数的结果替换。(更多关于此)
顺便说一句,对于所有认为JSON只适用于JavaScript的人来说,请查看下面的解释并确认其他方面
工具书类
- (谢谢)
- (谢谢)
- 另类
- JSON是JavaScript对象表示法。与XML相比,它是一种更紧凑的跨网络连接传输数据集的方法。
我建议在任何类似AJAX的应用程序中使用JSON,否则XML将是“推荐”选项。XML的冗长将增加下载时间和增加带宽消耗($$)。您可以使用JSON实现同样的效果,它的标记几乎专门用于数据本身,而不是底层结构。常见的简短回答是:如果您使用AJAX进行数据请求,您可以轻松地将对象作为JSON字符串发送和返回。Javascript支持的可用扩展名toJSON()调用所有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是一种串行化的方式,它变成了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代码的舒适方式。因此,第
var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);
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.
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");
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'});
var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});
{
"Family": ["Me", "Wife", "Kid1", "Kid2"]
}
<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>
<?php
echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
?>
// JSON object
{
"name": "John",
"age": 20
}
// JSON array
[
{
"name": "John",
"age": 20
},
{
"name": "Peter",
"age": 22
}
]