天津票网网站,威宁建设局网站,seo如何进行优化,手机网站开发工具6JSON简介
JSON ( JavaScript Object Notation, JS 对象标记 ) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅…JSON简介
JSON ( JavaScript Object Notation, JS 对象标记 ) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写同时也易于机器解析和生成并有效地提升网络传输效率。
在JSON出现之前大家一直用XML来传递数据。因为XML是一种纯文本格式所以它适合在网络上交换数据。XML本身不算复杂但是加上DTD、XSD、XPath、XSLT等一大堆复杂的规范以后任何正常的软件开发人员碰到XML都会感觉头大了最后大家发现即使你努力钻研几个月也未必搞得清楚XML的规范。
后来在2002年的一天道格拉斯·克罗克福特Douglas Crockford发明了JSON这种超轻量级的数据交换格式。
道格拉斯长期担任雅虎的高级架构师自然钟情于JavaScript。他设计的JSON实际上是JavaScript的一个子集。在JSON中一共就这么几种数据类型
number和JavaScript的number完全一致
boolean就是JavaScript的true或false
string就是JavaScript的string
null就是JavaScript的null
array就是JavaScript的Array表示方式——[]
object就是JavaScript的{ ... }表示方式。
以及上面的任意组合。并且JSON还定死了字符集必须是UTF-8表示多语言就没有问题了。为了统一解析JSON的字符串规定必须用双引号”“Object的键也必须用双引号”“。
由于JSON非常简单很快就风靡Web世界并且成为ECMA标准。几乎所有编程语言都有解析JSON的库而在JavaScript中我们可以直接使用JSON因为JavaScript内置了JSON的解析。
把任何JavaScript对象变成JSON就是把这个对象序列化成一个JSON格式的字符串这样才能够通过网络传递给其他计算机。
如果我们收到一个JSON格式的字符串只需要把它反序列化成一个JavaScript对象就可以在JavaScript中直接使用这个对象了。
JSON 语法
JSON 语法规则 在 JS 语言中一切都是对象。因此任何支持的类型都可以通过 JSON 来表示例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型
对象表示为键值对数据由逗号分隔花括号保存对象方括号保存数组JSON 键/值对
JSON 键值对是用来保存 JS 对象的一种方式和 JS 对象的写法也大同小异键/值对组合中的键名写在前面并用双引号 “” 包裹使用冒号 : 分隔然后紧接着值
{firstName: John}
这很容易理解等价于这条 JavaScript 语句
{firstName : John}
JSON 与 JS 对象的关系 很多人搞不清楚 JSON 和 Js 对象的关系甚至连谁是谁都不清楚。其实可以这么理解 JSON 是 JS 对象的字符串表示法它使用文本表示一个 JS 对象的信息本质是一个字符串。如
var obj {a: Hello, b: World}; //这是一个对象注意键名也是可以使用引号包裹的
var json {a: Hello, b: World}; //这是一个 JSON 字符串本质是一个字符串
JSON 和 JS 对象互转 要实现从对象转换为 JSON 字符串使用 JSON.stringify() 方法
var json JSON.stringify({a: Hello, b: World}); //结果是 {a: Hello, b: World}
要实现从 JSON 转换为对象使用 JSON.parse() 方法
var obj JSON.parse({a: Hello, b: World}); //结果是 {a: Hello, b: World}
常用类型
在 JS 语言中一切都是对象。因此任何支持的类型都可以通过 JSON 来表示例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。
对象对象在 JS 中是使用花括号包裹 {} 起来的内容数据结构为 {key1value1, key2value2, …} 的键值对结构。在面向对象的语言中key 为对象的属性value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。
数组数组在 JS 中是方括号 [] 包裹起来的内容数据结构为 [“java”, “javascript”, “vb”, …] 的索引结构。在 JS 中数组是一种比较特殊的数据类型它也可以像对象那样使用键值对但还是索引使用得多。同样值的类型可以是任意类型。
基础示例
简单地说[1] JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串然后就可以在网络或者程序之间轻松地传递这个字符串并在需要的时候将它还原为各编程语言所支持的数据格式例如在 PHP 中可以将 JSON 还原为数组或者一个基本对象。在用到AJAX时如果需要用到数组传值这时就需要用JSON将数组转化为字符串。 表示对象 JSON最常用的格式是对象的 键值对。例如下面这样
{firstName: Brett, lastName: McLaughlin}
表示数组 和普通的 JS 数组一样JSON 表示数组的方式也是使用方括号 []。
{
people:[ {firstName: Brett,lastName:McLaughlin},{firstName:Jason,lastName:Hunter}]
}
这不难理解。在这个示例中只有一个名为 people的变量值是包含两个条目的数组每个条目是一个人的记录其中包含名和姓。上面的示例演示如何用括号将记录组合成一个值。当然可以使用相同的语法表示更过多的值每个值包含多个记录。
在处理 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的。
除了上述之外JSON和XML还有另外一个很大的区别在于有效数据率。JSON作为数据包格式传输的时候具有更高的效率这是因为JSON不像XML那样需要有严格的闭合标签这就让有效数据量与总数据包比大大提升从而减少同等数据流量的情况下网络的传输压力
实例比较
XML和JSON都使用结构化方法来标记数据下面来做一个简单的比较。 用XML表示中国部分省市数据如下
?xml version1.0 encodingutf-8?
countryname中国/nameprovincename黑龙江/namecitiescity哈尔滨/citycity大庆/city/cities/provinceprovincename广东/namecitiescity广州/citycity深圳/citycity珠海/city/cities/provinceprovincename台湾/namecitiescity台北/citycity高雄/city/cities/provinceprovincename新疆/namecitiescity乌鲁木齐/city/cities/province
/country
用JSON表示如下
{name: 中国,province: [{name: 黑龙江,cities: {city: [哈尔滨, 大庆]}}, {name: 广东,cities: {city: [广州, 深圳, 珠海]}}, {name: 台湾,cities: {city: [台北, 高雄]}}, {name: 新疆,cities: {city: [乌鲁木齐]}}]
}
可以看到JSON 简单的语法格式和清晰的层次结构明显要比 XML 容易阅读并且在数据交换方面由于 JSON 所使用的字符要比 XML 少得多可以大大得节约传输数据所占用得带宽。
校验工具
前言 JSON格式取代了xml给网络传输带来了很大的便利,但是却没有了xml的一目了然,尤其是json数据很长的时候,我们会陷入繁琐复杂的数据节点查找中。 但是国人的一款在线工具 BeJson 、SoJson在线工具让众多程序员、新接触JSON格式的程序员更快的了解JSON的结构更快的精确定位JSON格式错误。 功能 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数据总是提不起精神没关系,使用这个功能,所有的关键字都[3] 会被着色,数据结构一目了然。 7、 JSON-XML互转 顾名思义将JSON格式的数据转化成XML[3] 格式、或者XML格式的数据转化成JSON格式一切都不是问题。 8、 JSON-VIEW JSON查看实用工具在开发过程中(windows平台中)可以对JSON数据进行格式化和视图显示。 9、 它和xml一样都是一种数据交换格式