JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。便于人读写,也便于机器分析和生成。
基础结构
JSON有两种结构:
1.名称/值对的集合。在不同的语言中,它被理解为对象、记录、结构、字典、哈希表、键列表或关联数组。
2.值的有序列表。在大多数语言中,它被理解为数组。
基础示例
简单来说,JSON可以将JavaScript对象中表示的一组数据转换为一个字符串,然后它可以轻松地在函数之间传递这个字符串,或者在异步应用程序中将字符串从Web客户端传递到服务器端程序。这个字符串看起来有点奇怪,但是JavaScript可以很容易地解释它,JSON可以表示比‘名称/值对’更复杂的结构。例如,您可以表示数组和复杂的对象,而不仅仅是简单的键和值列表。
表示名称 / 值对
在最简单的形式中,“名称/值对”可以由JSON表示如下:{ 名字: Brett}
这个例子非常简单,实际上比等价的纯文本“名称/值对”占用了更多的空间:firstName=Brett
然而,当多个“名称/值对”串在一起时,JSON将显示其值。首先,您可以创建具有多个“名称/值对”的记录,例如:
{ 名字:布雷特,姓氏:麦克劳林,电子邮件: aaaa }
从语法的角度来看,这与“名称/值对”相比没有太大的优势,但是在这种情况下JSON更容易使用,可读性更好。例如,它明确指出上述三个值都是同一记录的一部分;花括号在这些值之间建立了某种联系。
表示数组
JSON不仅可以提高可读性,还可以在需要表示一组值时降低复杂性。例如,假设您想要表示一个人名列表。在XML中,需要很多开始标签和结束标签;如果您使用一个典型的名称/值对(就像在本系列的前几篇文章中看到的那样),您必须建立一个专有的数据格式,或者将键名称修改为person1-firstName这样的形式。
如果使用JSON,只需要将多个花括号记录组合在一起:
{ people: [
{ 名字:布雷特,姓氏:麦克劳林,电子邮件: aaaa },
{ 名字:杰森,姓氏:猎人,电子邮件: bbbb},
{ 名字:埃利奥特,姓氏:哈罗德,电子邮件: cccc }
]}
不难理解。在这个例子中,只有一个名为people的变量,值是一个包含三个条目的数组,每个条目都是一个人的记录,其中包含名字、姓氏和电子邮件地址。上面的例子演示了如何用括号将记录组合成一个值。当然,您可以使用相同的语法来表示多个值(每个值包含多条记录):
{ 程序员:[
{ 名字:布雷特,姓氏:麦克劳林,电子邮件: aaaa },
{ 名字:杰森,姓氏:猎人,电子邮件: bbbb },
{ 名字:埃利奥特,姓氏:哈罗德,电子邮件: cccc }
],
作者:[
{ 名字:艾萨克,姓氏:阿西莫夫,体裁:科幻 },
{ 名字: Tad ,姓氏:威廉姆斯,流派:幻想 },
{ 名字:弗兰克,姓氏:佩雷蒂,流派:基督教小说 }
],
音乐家:[
{ 名字:埃里克,姓氏:克拉普顿,乐器:吉他 },
{ 名字:谢尔盖,姓氏:拉赫玛尼诺夫,乐器:钢琴 }
] }
这里最值得注意的是,它可以表示多个值,每个值又包含多个值。但是还应该注意,记录中的实际名称/值对在不同的主条目(程序员、作者和音乐家)之间可能是不同的。JSON是完全动态的,允许您在JSON结构中间改变数据的表示方式。
在处理JSON格式数据时,没有需要遵守的预定义约束。因此,在同一个数据结构中,可以改变数据的表示方式,甚至可以用不同的方式表示同一个事物。
格式应用
一旦掌握了JSON格式,在JavaScript中使用它就很容易了。是JSON JavaScript的原生格式,这意味着你不需要任何特殊的API或工具包来用JavaScript处理JSON数据。
将JSON数据赋给变量
例如,您可以创建一个新的JavaScript变量,然后直接将JSON格式的数据字符串赋给它:
var people={ programmers :[{ first name : Brett , lastName:McLaughlin , email: aaaa },
{ 名字:杰森,姓氏:猎人,电子邮件: bbbb },
{ 名字:埃利奥特,姓氏:哈罗德,电子邮件: cccc }
],
作者:[
{ 名字:艾萨克,姓氏:阿西莫夫,体裁:科幻 },
{ 名字: Tad ,姓氏:威廉姆斯,流派:幻想 },
{ 名字:弗兰克,姓氏:佩雷蒂,流派:基督教小说 }
],
音乐家:[
{ 名字:埃里克,姓氏:克拉普顿,乐器:吉他 },
{ 名字:谢尔盖,姓氏:拉赫玛尼诺夫,乐器:钢琴 }
] }
这很简单;现在people包含了我们之前看到的JSON格式的数据。但是,这还不够,因为似乎访问数据的方式并不明显。
访问数据
虽然看起来不明显,但上面的长串其实只是一个数组;将这个数组放入JavaScript变量后,就可以轻松地访问它了。事实上,只需要点符号来表示数组元素。因此,要访问程序员列表中第一个条目的姓氏,只需在JavaScript中使用以下代码:
people . programmes[0]。姓氏;
注意,数组索引是从零开始的。因此,这行代码首先访问people变量中的数据;然后移到名为programmers的条目,再移到第一条记录([0]);最后,访问lastName键的值。结果字符串值为“McLaughlin”。
这里有几个使用同一个变量的例子。
people.authors[1]。流派//值为“奇幻”
人民.音乐家[3]。姓氏//未定义。这指的是第四个条目,没有一个
人民.程序员[2]。名字//值为“Elliotte”
使用这种语法,可以处理任何JSON格式的数据,而不需要使用任何额外的JavaScript工具包或API。
修改 JSON 数据
正如您可以用点和括号访问数据一样,您也可以用同样的方式轻松地修改数据:
人民.音乐家[1]。lastName= Rachmaninov
将字符串转换成JavaScript对象后,可以像这样修改变量中的数据。
转换回字符串
当然,如果您不能轻松地将对象转换回本文中提到的文本格式,那么所有的数据修改都没有什么价值。这种转换在JavaScript中也很简单:
string new jsontext=people . tojsonstring();
就是这样!现在你有了一个可以在任何地方使用的文本字符串。例如,您可以在Ajax应用程序中将它用作请求字符串。
更重要的是,您可以将任何JavaScript对象转换成JSON文本。您只能处理最初用JSON字符串赋值的变量。为了转换名为myObject的对象,只需执行相同形式的命令:
string myObjectInJSON=my object . tojsonstring();
这是JSON和本系列讨论的其他数据格式的最大区别。如果使用JSON,只需要调用一个简单的函数就可以得到格式化的数据,可以直接使用。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。即使您使用类似文档对象模型的API(它提供了将您自己的数据结构转换为文本的功能),您也需要学习这个API并使用API对象,而不是使用原生JavaScript对象和语法。
最后的结论是,如果要处理大量的JavaScript对象,那么JSON几乎肯定是一个不错的选择,这样就可以很容易地将数据转换成可以在请求中发送给服务器端程序的格式。
概念比较
JSON和XML的比较
可读性
JSON的可读性与XML相当。很难区分简单语法和标准标记形式。
可扩展性
XML天生具有可扩展性,JSON也是如此。XML不能扩展任何东西,但JSON不能。但是JSON打在Javascript的主场,可以存储Javascript复合对象,有着xml无法比拟的优势。
编码难度
XML中有丰富的编码工具,如Dom4j、JDom等。JSON也提供了工具。在没有工具的情况下,我相信熟练的开发人员可以尽快编写出想要的xml文档和JSON字符串。然而,xml文档中有更多的结构字符。
解码难度
有两种解析XML的方法:
首先,它由文档模型解析,即一组标签由父标签索引。例如:XML data . getelementsbytagname( tagname ),但这是要在文档结构事先已知的情况下使用的,所以不能通用封装。
另一种方法是遍历节点(文档和子节点)。这可以通过递归来实现,但是解析出来的数据仍然是不同形式的,往往无法提前满足要求。
解析这样的可扩展结构数据一定非常困难。
JSON也是如此。如果事先知道JSON的结构,用JSON进行数据传输是很奇妙的,可以写出实用、美观、可读性强的代码。如果你是纯前台开发者,你会很喜欢JSON的。但如果你是应用开发者,你就没那么喜欢了。毕竟,xml是真正的用于数据传输的结构化标记语言。
如果你不知道JSON的结构并解析它,那简直是噩梦。费时费力,代码会变得多余,结果也不尽如人意。不过这并不影响很多前台开发者选择JSON。因为json.js中的tojsonString()可以看到JSON的字符串结构。当然不是用这根弦。这仍然是一场噩梦。一般使用JSON的人看到这个字符串后,对JSON的结构有了清晰的认识,操作JSON也就更容易了。
以上是只针对Javascript中数据传输的xml和JSON的分析。在Javascript领域,JSON毕竟是主场,优势当然远超xml。如果Javascript复合对象存储在JSON中,结构未知,相信很多程序员都在哭着解析JSON。
示例对比
XML和JSON都使用结构化方法来标记数据。这里简单对比一下。
用XML表示的中国部分省市数据如下:
?xml版本=1.0 编码=utf-8 ?
国家
中国/名称
省
黑龙江/名称
城市
哈尔滨/城市
大庆/城市
/城市
/省份
省
广东/名称
城市
广州/城市
深圳/城市
珠海/城市
/城市
/省份
/国家
用JSON表示如下:
{
{姓名:中国,省份:[{姓名:黑龙江,城市:{城市:[哈尔滨,大庆]},
{名称:广东,城市:{城市:[广州,深圳,珠海]}
}
编码的可读性,xml优势明显,毕竟人类语言更接近这种描述结构。Json读起来更像一个数据块,但是读起来更令人困惑。而我们无法理解的语言正好适合机器阅读,所以可以通过json索引读取“黑龙江”的值。省份[0].名称。
从编码的手写难度上来说,xml还是比较舒服的,如果易读的话就好写。但是JSON写的字符数明显少了很多。去掉空白制表和换行符,JSON就是密集有用的数据,而xml包含很多重复的标记字符。
JSON在线校验工具
序
Json格式取代了xml,给网络传输带来了很大的便利,但是并没有xml那么一目了然。尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点搜索。
但是BeJson这个中国人的在线工具,却给很多程序员带来了一股清风。
功能介绍
1.JSON格式验证
很多人在得到JSON数据后,没有办法判断JSON数据格式是否正确,程序是否因为缺少或者符号太多而无法解析。这个函数正好可以帮助你完成JSON格式的验证。
2.JSON视图
想必很多程序员在寻找一个节点的时候都会遇到,他们会发现,如果不能直接从一行行的数据入手,即使知道在哪里,也要一个节点一个节点的往下看,万一不注意,就要从头开始找麻烦了。
有了这个函数,所有的JSON数据都将是视图格式,一目了然,什么对象下有多少数组,一个数组下有多少对象。
这个功能很实用。不仅有查看功能,还有格式化、压缩、转义和检查功能。总之很厉害。
3.压缩逸出
程序员在编写JSON语句的测试用例时,往往为了方便直接写一个JSON字符串,却陷入了无穷无尽的双引号转义的麻烦中。这个函数结合了压缩和转义,让你在写测试用例的时候很安心。
4.JSON在线编辑器
如果你目前的电脑只是没有你熟悉的编辑器,想要修改JSON数据的某个节点,这个函数可以满足你的需求。
5.在线发送JSON数据
众所周知,JSON多用于web项目的开发。如果你想测试一个接口是否可以准确地接受JSON数据,你必须写一个页面来发送JSON字符串,并重复这样做。有了这个函数的出现,你就可以摆脱写测试页了,因为这个函数可以把指定的JSON数据发送到指定的url。很方便。
6.JSON着色
很多人写文档的时候,总是希望文档能一目了然,但是白底黑字的JSON数据总是很压抑,这也没关系。使用该功能,所有关键字都会被着色,数据结构一目了然。
7.JSON-XML转换
顾名思义,把JSON数据转换成XML格式,或者把XML数据转换成JSON格式都不是问题。
JSON在线格式化工具
Json在线代码格式化/美化/压缩/编辑/转换工具
http://tools.jb51.net/code/jsoncodeformat
下面小编给大家准备了几个例子。你可以看看这篇文章:https://www.jb51.net/article/36678.htm