Json结构实例Word文档格式.docx
- 文档编号:21049496
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:27
- 大小:288.16KB
Json结构实例Word文档格式.docx
《Json结构实例Word文档格式.docx》由会员分享,可在线阅读,更多相关《Json结构实例Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
5.5实例比较16
6JSON在js中的应用示例17
6.1例一17
6.2例二18
6.3例三(json.js包的使用还有些问题)18
7用JQuery处理JSON20
7.1处理从服务器返回的JSON数据20
7.2处理普通JSON数据21
7.2.1例一21
7.2.3例二22
7.2.4例三22
7.2.4例四22
7.2.5例五23
1JSON基础
1.1JSON的定义
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。
易于人阅读和编写,同时也易于机器解析和生成。
它基于JavaScriptProgrammingLanguage,StandardECMA-2623rdEdition-December1999的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。
这些特性使JSON成为理想的数据交换语言。
1.2JSON的结构
∙“名称/值”对的集合(Acollectionofname/valuepairs)。
不同的语言中,它被理解为对象(object)、纪录(record)、结构(struct)、字典(dictionary)、哈希表(hashtable)、有键列表(keyedlist)或者关联数组(associativearray)。
∙值的有序列表(Anorderedlistofvalues)。
在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。
事实上大部分现代计算机语言都以某种形式支持它们。
这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
1.3JSON的形式
JSON具有一下这些形式:
(1)对象是一个无序的“‘名称/值’对”集合。
一个对象以“{”开始、“}”结束。
每个“名称”后跟一个“:
”,“‘名称/值’对”之间使用“,”分隔。
(2)数组是值(value)的有序集合。
一个数组以“[”开始、“]”结束。
值之间使用“,”分隔。
(3)值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、null、对象(object)或者数组(array)。
这些结构可以嵌套。
(4)字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。
一个字符(character)即一个单独的字符串(characterstring)。
字符串(string)与C或者Java的字符串非常相似。
(5)数值(number)也与C或者Java的数值非常相似。
除去未曾使用的八进制与十六进制格式,除去一些编码细节。
空白可以加入到任何符号之间。
2JSON示例
2.1示例一
在这个例子中,创建了一个对象,它只包含一个成员“bindings”。
“bindings”中有一个包含了3个对象的数组,而这每个对象都有“ircEvent”、“method”、“regex”3个成员。
2.2示例二
按照最简单的形式,可以用下面这样的JSON表示名称/值对:
这个示例非常基本,而且实际上比等效的纯文本名称/值对占用更多的空间:
但是,当将多个名称/值对串在一起时,JSON就会体现出它的价值了。
首先,可以创建包含多个名称/值对的记录,比如:
从语法方面来看,这与名称/值对相比并没有很大的优势,但是在这种情况下,JSON更容易使用,而且可读性更好。
例如,它明确地表示以上三个值都是同一记录的一部分,花括号使这些值有了某种联系。
2.3值的数组
当需要表示一组值时,JSON不但能够提高可读性,而且可以减少复杂性。
例如,假设你希望表示一个人名列表。
在XML中,需要许多开始标记和结束标记;
如果使用JSON,就只需将多个花括号的记录分组在一起:
这不难理解,在这个示例中,只有一个名为people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。
上面的示例演示如何用括号将记录组合成一个值。
当然,可以使用相同的语法表示多个值(每个值包含多个记录):
这里最值得注意的是,能够表示多个值,每个值进而包含多个值。
但是还应该注意,在不同的主条目(programmers、authors和musicians)之间,记录中实际的名称/值对可以不一样。
JSON是完全动态的,允许在JSON结构的中间改变表示数据的方式。
在处理JSON格式的数据时,没有需要遵守的预定义的约束。
所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。
3JSON的使用
json.js
String.parseJSON()解析函数,它将JSON文本解析称object或者array,可以抛出一个语法错误的异常;
Array.toJSONString(),boolean.toJSONString(),date.toJSONString(),number.toJSONString(),object.toJSONString(),string.toJSONString()这几个函数可以生成JSON文本。
下面是一些简单的解析和转换的例子:
结果是01
结果是[“0”,”1”]
3.2在JavaScript中使用JSON
JSON以一种特定的字符串形式来表示JavaScript对象。
如果将具有这样一种形式的字符串赋给任意一个JavaScript变量,那么该变量会变成一个对象引用,而这个对象就是字符串所构建出来的,好像有点拗口,我们还是用实例来说明。
3.2.1将JSON数据赋值给变量
例如,可以创建一个新的JavaScript变量,然后将JSON格式的数据字符串直接赋值给它:
这非常简单。
现在people包含前面看到的JSON格式的数据,但是,这还不够,因为访问数据的方式似乎还不明显。
3.2.2访问数据
尽管看起来不明显,但是上面的长字符串实际上只是一个数组;
将这个数组放进JavaScript变量之后,就可以很轻松地访问它。
实际上,只需用点号表示法来表示数组元素。
所以,要想访问programmers列表的第一个条目的姓氏,只需在JavaScript中使用下面这样的代码:
注意,数组索引是从零开始的。
所以,这行代码首先访问people变量中的数据;
然后移动到称为programmers的条目,再移动到第一个记录([0]);
最后,访问lastName键的值。
结果是字符串值“McLaughlin”。
下面是使用同一变量的几个示例。
利用这样的语法,可以处理任何JSON格式的数据,而不需要使用任何额外的JavaScript工具包或API。
3.2.3修改JSON数据
正如可以用点号和括号访问数据,也可以按照同一的方式轻松地修改数据:
在将字符串转换为JavaScript对象之后,就可以像这样修改变量中的数据。
3.2.4转换回字符串(见5.3小节)
当然,如果不能轻松地将对象转换回文本格式,那么所有数据修改都没有太大的价值。
在JavaScript中这种转换也很简单:
这样就行了。
现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作Ajax应用程序中的请求字符串。
更重要的是,可以将任何JavaScript对象转换为JSON文本。
并非只能处理原来用JSON字符串赋值的变量。
为了对名为myObject的对象进行转换,只需执行相同形式的命令。
如果使用JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。
最终结论是:
如果要处理大量JavaScript对象,那么JSON几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。
3.3将JSON发给服务器
将JSON发给服务器并不难,但却至关重要,而且还有一些重要的选择要做。
但是,一旦决定使用JSON,所要做的这些选择就会十分简单而且数量有限,所以你需要考虑的关注的事情不多,重要的是能够将JSON字符串发送给服务器,而且最好能做到尽快和尽可能简单。
3.3.1通过GET以名称/值对发送JSON
将JSON数据发给服务器的最简单方法是将其转换成文本,然后以名称/值对的值的方式进行发送。
请务必注意,JSON格式的数据是相当长的一个对象,看起来可能会如清单1所示:
清单1.JSON格式的简单JavaScript对象
如果要以名称/值对将其发送到服务器端,应该如下所示:
这看起来不错,但却存在一个问题:
在JSON数据中会有空格和各种字符,Web浏览器往往要尝试对其继续编译。
要确保这些字符不会在服务器上(或者在将数据发送给服务器的过程中)引起混乱,需要在JavaScriptescape()函数中做如下添加:
该函数可以处理空格、斜线和其他任何可能影响浏览器的内容,并将它们转换成Web可用字符(比如,空格会被转换成%20,浏览器并不会将其视为空格处理,而是不做更改,将其直接传递到服务器)。
之后,服务器会(通常自动)再把它们转换回它们传输后的本来“面目”。
这种做法的缺点有两个:
(1)在使用GET请求发送大块数据时,对URL字符串有长度限制。
虽然这个限制很宽泛,但对象的JSON字符串表示的长度可能超出您的想象,尤其是在使用极其复杂的对象时更是如此。
(2)在跨网络以纯文本发送所有数据的时候,发送数据面临的不安全性超出了您的处理能力。
简言之,以上是GET请求的两个限制,而不是简单的两个与JSON数据相关的事情。
在想要发送用户名和姓之外的更多内容,比如表单中的选择时,二者可能会需要多加注意。
若要处理任何机密或极长的内容,可以使用POST请求。
3.3.2利用POST请求发送JSON数据
当决定使用POST请求将JSON数据发送给服务器时,并不需要对代码进行大量更改,如下所示:
请求使用POST而非GET打开,而且Content-Type头被设置为让服务器预知它能得到何种数据。
在这种情况下,即为application/x-www-form-urlencoded,它让服务器知道现在发送的是文本,正如它从常规的HTML表单中得到的一样。
另一个简单提示是URL的末尾追加了时间。
这就确保了请求不会在它第一次被发送后即缓存,而是会在此方法每次被调用后重新创建和重发;
此URL会由于时间戳的不同而稍微有些不同。
这种技巧常被用于确保到脚本的POST每次都会实际生成新请求且Web服务器不会尝试缓存来自服务器的响应。
3.3.3JSON就只是文本
不管使用GET还是POST,关键之处在于JSON就只是文本。
由于不需要特殊编码而且每个服务器端脚本都能处理文本数据,所以可以轻松利用JSON并将其应用到服务器。
假如JSON是二进制格式的或是一些怪异的文本编码,情况就不这么简单了;
幸好JSON只是常规的文本数据(正如脚本能从表单提交中所接收到的数据,在POST段和Content-Type头中亦可以看出),所以在将数据发送到服务器时无需太费心。
3.4在服务器上解释JSON
一旦你编写完客户端JavaScript代码、允许用户与Web表单和Web页的交互、收集发送给服务器端程序以做处理所需的信息,此时,服务器就成为了应用程序(如果调用了异步使用的服务器端程序,则可能是我们认为的所谓的“Ajax应用程序”)中的主角。
在此时,您在客户端所做的选择(比如使用JavaScript对象,然后将其转换成JSON字符串)必须要与服务器端的选择相匹配,比如使用哪个API解码JSON数据。
3.4.1处理JSON的两个步骤
不管在服务器端使用何种语言,在服务器端处理JSON基本上就需要两个步骤。
(1)针对编写服务器端程序所用的语言,找到相应的JSON解析器/工具箱/帮助器API。
(2)使用JSON解析器/工具箱/帮助器API取得来自客户机的请求数据并将数据转变成脚本能理解的东西。
以上差不多就是目前所应了解的大致内容了。
接下来,我们对每个步骤进行较为详细的介绍。
3.4.2寻找JSON解析器
寻找JSON解析器或工具箱最好的资源是JSON站点。
在这里,除了可以了解此格式本身的方方面面之外,还可以通过各种链接找到JSON的各种工具和解析器,从ASP到Erlang,到Pike,再到Ruby,应有尽有。
您只需针对自己编写脚本所用的语言下载相应的工具箱即可。
为了让服务器端脚本和程序能够使用此工具箱,可以根据情况对其进行选择、扩展或安装(如果在服务器端使用的是C#、PHP或Lisp,则可变性更大)。
例如,如果使用的是PHP,可以简单将其升级至PHP5.2并用它完成操作;
在PHP这个最新版本默认包含了JSON扩展。
实际上,那也是在使用PHP时处理JSON的最好方法。
如果使用的是Javaservlet,json.org上的org.json包显然就是个不错的选择。
在这种情况下,可以从JSONWeb站点下载json.zip并将其中包含的源文件添加到项目构建目录。
编译完这些文件后,一切就就绪了。
对于所支持的其他语言,同样可以使用相同的步骤;
使用何种语言取决于您对该语言的精通程度,最好使用您所熟悉的语言。
3.4.3使用JSON解析器
一旦获得了程序可用的资源,剩下的事就是找到合适的方法进行调用。
比如,假设为PHP使用的是JSON-PHP模板:
通过该模板,可将获得的所有数据(数组格式的、多行的、单值的或JSON数据结构中的任何内容)转换成原生PHP格式,放在$value变量中。
如果在servlet中使用的是org.json包,则会使用如下代码:
4JSON的优点和不足
对于JSON,首先要明白JSON和XML一样也是一种简单文本格式。
相对于XML,它更加易读、更便于肉眼检查。
在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号和逗号。
下图是一个JSON有效负载:
将上面的JSON有效负载用XML改写,如下:
是不是很相似?
但它们并不相同。
下面将详细阐述采用JSON句法的优点和不足。
4.1优点
乍看上去,使用JSON的数据分隔符的优点可能并不那么明显,但存在一个根本性的缘由:
它们简化了数据访问。
使用这些数据分隔符时,JavaScript引擎对数据结构(如字符串、数组、对象)的内部表示恰好与这些符号相同。
这将开创一条比DOM技术更为便捷的数据访问途径。
下面列举几个JavaScript代码片段来说明这一过程,这些代码片段会访问先前的JSON代码片段中的信息:
(1)访问JSON中的名称:
addressbook.name
(2)访问JSON中的地址:
addressbook.address.street
(3)访问JSON中的电话号码第一位:
addressbook.address.phoneNumbers[0]
JSON的另一个优点是它的非冗长性。
在XML中,打开和关闭标记是必需的,这样才能满足标记的依从性;
而在JSON中,所有这些要求只需通过一个简单的括号即可满足。
在包含有数以百计字段的数据交换中,传统的XML标记将会延长数据交换时间。
目前还没有正式的研究表明JSON比XML有更高的线上传输效率;
人们只是通过简单的字节数比较发现,对于等效的JSON和XML有效负载,前者总是小于后者。
至于它们之间的差距有多大,特别是在新的XML压缩格式下它们的差距有多大,有待进一步的研究。
此外,还有一下一些优点:
(1)轻量级的数据交换格式
(2)人们读写更加容易
(3)易于机器的解析和生成
(4)能够通过JavaScript中eval()函数解析JSON
(5)JSON支持多语言。
包括:
ActionScript,C,C#,ColdFusion,E,Java,JavaScript,ML,ObjectiveCAML,Perl,PHP,Python,Rebol,Ruby,andLua.
4.2不足
和许多好东西都具有两面性一样,JSON的非冗长性也不例外,为此JSON丢失了XML具有的一些特性。
命名空间允许不同上下文中的相同的信息段彼此混合,然而,显然在JSON中已经找不到了命名空间。
JSON与XML的另一个差别是属性的差异,由于JSON采用冒号赋值,这将导致当XML转化为JSON时,在标识符(XMLCDATA)与实际属性值之间很难区分谁应该被当作文本考虑。
另外,JSON片段的创建和验证过程比一般的XML稍显复杂。
从这一点来看,XML在开发工具方面领先于JSON。
5JSON与XML的比较
5.1可读性
JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。
5.2可扩展性
XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
5.3编码难度
XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。
5.4解码难度
XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。
5.5实例比较
XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。
现假设有一个用户数据包括:
用户名、密码、所在部门、性别、年龄。
用XML表示如下:
用JSON表示如下:
与XML一样,JSON也是基于文本的,且它们都使用Unicode编码,同样具有可读性。
XML比较适合于标记文档,而JSON却更适合于时行数据交换处理。
6JSON在js中的应用示例
6.1例一
1.function
showJSON()
{
2.
var
user
=
3.
4.
"
username"
:
andy"
5.
age"
20,
6.
info"
tel"
123456"
cellphone"
98765"
},
7.
address"
8.
[
9.
{"
city"
beijing"
"
postcode"
222333"
10.
newyork"
555666"
}
11.
]
12.
13.
14.
alert(user.username);
15.
alert(user.age);
16.
alert(user.info.cellphone);
17.
alert(user.address[0].city);
18.
alert(user.address[0].postcode);
19.}
这表示一个user对象,拥有username,age,info,address等属性。
同样也可以用JSON来简单的修改数据,修改上面的例子
6.2例二
19.
20.
user.username
Tom"
;
21.
22.}
6.3例三(json.js包的使用还有些问题)
JSON提供了json.js包,下载http:
//www.json.org/json.js后,将其引入然后就可以简单的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Json 结构 实例