【Json】1、JSON 数据格式

JSON(JavaScript Object Notation)
是千篇一律种轻量级的数据交换格式。JSON采用了独立于言语的文本格式,这些特征使JSON成为美的数据交换语言。易于人阅读与编制,同时也易机器解析和浮动。

基础结构

JSON建构为少数栽结构:

  1. “名称/值”对之集合(A collection of name/value
    pairs)。不同的语言中,它于理解呢目标(object),记录(record),结构(struct),字典(dictionary),哈希表(hash
    table),有键列表(keyed list),或者关联数组 (associative array)。

  2. 值的平稳列表(An ordered list of
    values)。在大多数语言中,它为喻为数组(array)。

 

基础示例

概括地游说,JSON 可以用 JavaScript
对象被象征的同等组数易为字符串,然后就是可以函数之间轻松地传递者字符串,或者当异步应用程序中将字符串从
Web 客户机传递让服务器端程序。这个字符串看起有少古怪,但是
JavaScript 很容易解释其,而且 JSON 可以表示于”名称 /
值对”更复杂的组织。例如,可以象征数组和复杂性的靶子,而不仅是键和价值的简约列表。

代表称 / 值对

按照最简单易行的花样,可以用底这样的 JSON 表示 “名称 / 值对” :{ “firstName”: “Brett” }

这示例非常基本,而且实际比同一的纯文本 “名称 / 值对”
占用更多的长空:firstName=Brett

然,当用大半只”名称 / 值对”串在一道时,JSON
就见面反映出它们的价了。首先,可以创建包含多只”名称 / 值对”的 记录,比如:

{ “firstName”: “Brett”, “lastName”:”McLaughlin”, “email”: “aaaa” }

自从语法方面来拘禁,这与”名称 / 值对”相比并没有死挺的优势,但是在这种情景下
JSON
更易使,而且可读性更好。例如,它不言而喻地表示以上三个价都是一样记录的一样有些;花括号要这些价值有了某种联系。

代表数组

当得代表无异组值时,JSON
不但能够增强可读性,而且得减小复杂性。例如,假要您要代表一个口名列表。在
XML 中,需要多发端标记和收标记;如果采取典型的 名称 / 值
对(就比如在遵循系列前面文章中看到底那种名称 /
值对),那么得建立平等种植专有的数格式,或者将键名称修改为
person1-firstName这样的样式。

假使以 JSON,就单纯待用大半只带花括号的记录分组在合:

{ “people”: [

{ “firstName”: “Brett”, “lastName”:”McLaughlin”, “email”: “aaaa” },

{ “firstName”: “Jason”, “lastName”:”Hunter”, “email”: “bbbb”},

{ “firstName”: “Elliotte”, “lastName”:”Harold”, “email”: “cccc” }

]}

即时容易理解。在斯示例中,只出一个名吧
people的变量,值是包含三只条目的往往组,每个条目是一个总人口之笔录,其中富含名为、姓和电子邮件地址。上面的以身作则演示如何用括号用记录组合成一个值。当然,可以采用相同之语法表示多单价值(每个值包含多只记录):

{ “programmers”: [

{ “firstName”: “Brett”, “lastName”:”McLaughlin”, “email”: “aaaa” },

{ “firstName”: “Jason”, “lastName”:”Hunter”, “email”: “bbbb” },

{ “firstName”: “Elliotte”, “lastName”:”Harold”, “email”: “cccc” }

],

“authors”: [

{ “firstName”: “Isaac”, “lastName”: “Asimov”, “genre”: “science
fiction” },

{ “firstName”: “Tad”, “lastName”: “Williams”, “genre”: “fantasy” },

{ “firstName”: “Frank”, “lastName”: “Peretti”, “genre”: “christian
fiction” }

],

“musicians”: [

{ “firstName”: “Eric”, “lastName”: “Clapton”, “instrument”: “guitar”
},

{ “firstName”: “Sergei”, “lastName”: “Rachmaninoff”, “instrument”:
“piano” }

] }

此地最值得注意的是,能够代表多只价值,每个值进而含有多独价。但是还相应专注,在不同的主条目(programmers、authors
和 musicians)之间,记录被实际的称谓 / 值对可免均等。JSON
是一心动态的,允许在 JSON 结构的中游改变表示数据的法门。

当处理 JSON
格式的数额时,没有用遵循的预定义的律。所以,在平的数据结构中,可以转移表示数据的艺术,甚至可以因不同措施意味着一致事物。

 

格式应用

左右了 JSON 格式之后,在 JavaScript 中以她便怪简单了。JSON 是
JavaScript 原生格式,这意味着当 JavaScript 中拍卖 JSON
数据不需要其他异样之 API 或工具包。

拿 JSON 数据赋值给变量

诸如,可以创建一个新的 JavaScript 变量,然后用 JSON
格式的多少字符串直接赋值给其:

var people = { “programmers”: [ { “firstName”: “Brett”,
“lastName”:”McLaughlin”, “email”: “aaaa” },

{ “firstName”: “Jason”, “lastName”:”Hunter”, “email”: “bbbb” },

{ “firstName”: “Elliotte”, “lastName”:”Harold”, “email”: “cccc” }

],

“authors”: [

{ “firstName”: “Isaac”, “lastName”: “Asimov”, “genre”: “science
fiction” },

{ “firstName”: “Tad”, “lastName”: “Williams”, “genre”: “fantasy” },

{ “firstName”: “Frank”, “lastName”: “Peretti”, “genre”: “christian
fiction” }

],

“musicians”: [

{ “firstName”: “Eric”, “lastName”: “Clapton”, “instrument”: “guitar”
},

{ “firstName”: “Sergei”, “lastName”: “Rachmaninoff”, “instrument”:
“piano” }

] }

就非常简单;现在 people包含前面看到底 JSON
格式的数。但是,这还不够,因为访问数的法子如同尚非显眼。

 

访数

尽管看起不明显,但是上面的长字符串实际上就是一个数组;将此数组放上
JavaScript
变量之后,就可老自在地访问它。实际上,只需要用点号表示拟来代表数组元素。所以,要惦记访问
programmers 列表的率先个条文的姓氏,只需要以 JavaScript
中运用下这样的代码:

people.programmers[0].lastName;

瞩目,数组索引是起零碎初始的。所以,这行代码首先走访
people变量中之多少;然后倒及叫
programmers的章,再挪到第一个记录([0]);最后,访问
lastName键的值。结果是字符串值 “McLaughlin”。

下面是使同样变量的几乎单示范。

people.authors[1].genre // Value is “fantasy”

people.musicians[3].lastName // Undefined. This refers to the fourth
entry, and there isn’t one

people.programmers[2].firstName // Value is “Elliotte”

运这样的语法,可以拍卖任何 JSON 格式的数据,而不需要使用其他额外的
JavaScript 工具确保还是 API。

 

修改 JSON 数据

凑巧使可就此点号和括号访问数,也堪按同的法门轻松地改数据:

people.musicians[1].lastName = “Rachmaninov”;

于将字符串转换为 JavaScript 对象后,就好像这样改变量中之数。

 

转移回字符串

自然,如果不能够轻松地用目标转换回本文提到的文本格式,那么具有数据修改都不曾最好死的价。在
JavaScript 中这种转移为颇粗略:

String newJSONtext = people.toJSONString();

这么就是推行了!现在就算获了一个好在另地方用的文本字符串,例如,可以拿其用作
Ajax 应用程序中之请字符串。

又重要之凡,可以拿其它JavaScript 对象转换为 JSON
文本。并非只能处理原来用 JSON 字符串赋值的变量。为了对号称也
myObject的对象进行换,只需要实践同一款式之一声令下:

String myObjectInJSON = myObject.toJSONString();

就就算是 JSON 与照系列讨论的另数据格式之间最为酷的距离。如果采用
JSON,只待调用一个简便的函数,就足以获通过格式化的数,可以直接用了。对于另外数据格式,需要以原数据和格式化数据里面展开更换。即使采用
Document Object Model 这样的
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的解析方法发出有限种:

相同凡是通过文档模型分析,也不怕是经过父标签索引出一组标记。例如:xmlData.getElementsByTagName(“tagName”),但是这样是如当优先了解文档结构的状下使用,无法展开通用的包。

除此以外一栽艺术是遍历节点(document 以及
childNodes)。这个可以通过递回来实现,不过解析出的多少还是是形式各异,往往也无能够满足预先的渴求。

举凡这样可扩大的构造数据解析起来自然还充分不方便。

JSON也如出一辙如此。如果先了解JSON结构的状下,使用JSON进行数据传递简直是无比精彩了,可以描绘起好实用华美可读性强之代码。如果你是彻头彻尾的前台开发人员,一定会好欣赏JSON。但是要是你是一个采取开发人员,就未是那爱了,毕竟xml才是真正的结构化标记语言,用于开展多少传递。

若是如果无清楚JSON的布局使去解析JSON的语,那简直是噩梦。费时费力不说,代码也会换得冗余拖沓,得到的结果也遗憾。但是如此也未影响多前台开发人员选择JSON。因为json.js中之toJSONString()就可以看到JSON的字符串结构。当然不是行使是字符串,这样还是噩梦。常因此JSON的人数观看这字符串之后,就对准JSON的组织非常明白了了,就还便于之操作JSON。

上述是以Javascript中只是对数据传递的xml与JSON的辨析。在Javascript地盘内,JSON毕竟是主场作战,其优势当然要远远优于于xml。如果JSON中存储Javascript复合对象,而且无知晓那布局吧,我深信不疑广大程序员也如出一辙是哭着解析JSON的。

实例比较

XML和JSON都下结构化方法来号数据,下面来做一个简单易行的比较。

用XML表示中国有省市数据如下:

<?xml version=”1.0″ encoding=”utf-8″?>

<country>

    <name>中国</name>

    <province>

        <name>黑龙江</name>

     <cities>

            <city>哈尔滨</city>

            <city>大庆</city>

        </cities>

    </province>

    <province>

        <name>广东</name>

        <cities>

            <city>广州</city>

            <city>深圳</city>

            <city>珠海</city>

        </cities>

    </province>

</country>

 

因此JSON表示如下:

{

{name:”中国”, province:[ { name:”黑龙江”, cities:{
city:[“哈尔滨”,”大庆”] },

{name:”广东”, cities:{ city:[“广州”,”深圳”,”珠海”] } 

}

编码的可读性,xml有明确的优势,毕竟人类的言语更近乎这样的证实结构。json读起来还如一个数据块,读起来就是比较费解了。不过,我们读起来费解之言语,恰恰是顺应机器阅读,所以通过json的索引.province[0].name就会读取“黑龙江”这个价值。

编码的手写难度来说,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格式,一切还非是问题。

转自:http://www.cnblogs.com/SkySoot/archive/2012/04/17/2453010.html

相关文章