我已经在维基百科和谷歌上搜索了它,并阅读了官方文档,但我仍然没有真正理解JSON是什么,以及我为什么要使用它。
我已经使用PHP、MySQL和JavaScript / HTML构建了一段时间的应用程序,如果JSON可以让我的生活更轻松,或者让我的代码更好,或者让我的用户界面更好,那么我想知道它。谁能给我一个简洁的解释?
我已经在维基百科和谷歌上搜索了它,并阅读了官方文档,但我仍然没有真正理解JSON是什么,以及我为什么要使用它。
我已经使用PHP、MySQL和JavaScript / HTML构建了一段时间的应用程序,如果JSON可以让我的生活更轻松,或者让我的代码更好,或者让我的用户界面更好,那么我想知道它。谁能给我一个简洁的解释?
当前回答
JSON(Javascript对象表示法)是一种用于数据交换/传输的轻量级数据格式。它和JavaScript一样是键值对。 REST API广泛用于从服务器到客户端的数据传输。如今,许多社交媒体网站都在使用这种方式。尽管就数据类型而言,我认为它不如XML健壮。XML有非常丰富的数据类型和XSD。JSON在这方面有点欠缺。
对于相同数量的字符串数据,JSON将比XML更轻,因为XML有所有的开始和结束标签,等等…
其他回答
有时,在不需要技术细节的地方会给出技术细节,虽然许多投票最多的答案都是准确的技术和具体的,但我个人认为它们并不比维基百科或官方文件上的答案更容易理解或简洁。
我认为JSON就是它的本质——不同语言世界中的一种语言。然而,JSON与其他语言之间的区别在于,“每个人”都会“说”JSON以及他们的“母语”。
用一个真实的例子,让我们假设有三个人。其中一人将伊博语作为他们的母语。第二个人想要与第一个人互动,然而,第一个人把约鲁巴语作为他们的第一语言。
我们能做什么?
值得庆幸的是,我们例子中的第三个人是说英语长大的,但碰巧也会说伊博语和约鲁巴语作为第二语言,因此可以充当前两个人之间的中介。
在编程世界里,第一个“人”是Python,第二个“人”是Ruby,第三个“人”是JSON,他恰好能够将Ruby“翻译”成Python,反之亦然!显然,这个类比并不完美,但是,作为一个会说两种语言的人,我相信这是一种观察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的问题。
这里有一些实用的东西:Yahoo JSON
简而言之,它是一种用于传递数据的脚本符号。在某些方面,它是XML的替代方案,本机支持基本数据类型、数组和关联数组(名称-值对,称为对象,因为这是它们所表示的内容)。
该语法用于JavaScript, JSON本身代表“JavaScript对象表示法”。然而,它已经变得可移植,并在其他语言中使用。
这里有一个有用的详细链接:
http://secretgeek.net/json_3mins.asp
简而言之,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对象进行序列化和反序列化。