商城网站建,装修公司怎么做网站推广,网站设计公司那个好,网站被挂马无法访问JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式#xff0c;这些特性使JSON成为理想的数据交换语言。易于人阅读和编写#xff0c;同时也易于机器解析和生成。JSON 比 XML 更小、更快#xff0c;更易解析。JSON建构于两种结…JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式这些特性使JSON成为理想的数据交换语言。易于人阅读和编写同时也易于机器解析和生成。JSON 比 XML 更小、更快更易解析。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 表示 名称 / 值对 { firstName: Brett }{errorCode: 0, msg: 操作成功,data: null}但是当将多个名称 / 值对串在一起时JSON 就会体现出它的价值了。首先可以创建包含多个名称 / 值对的 记录比如{ firstName: Brett, lastName:McLaughlin, email: aaaa }从语法方面来看这与名称 / 值对相比并没有很大的优势但是在这种情况下 JSON 更容易使用而且可读性更好。例如它明确地表示以上三个值都是同一记录的一部分花括号使这些值有了某种联系。表示数组当需要表示一组值时JSON 不但能够提高可读性而且可以减少复杂性。例如假设您希望表示一个人名列表。在 XML 中需要许多开始标记和结束标记如果使用典型的 名称 / 值 对(就像在本系列前面文章中看到的那种名称 / 值对)那么必须建立一种专有的数据格式或者将键名称修改为 person1-firstName这样的形式。如果使用 JSON就只需将多个带花括号的记录分组在一起employee 对象是包含 3 个员工(对象)的数组{employees: [{ firstName:Bill , lastName:Gates },{ firstName:George , lastName:Bush },{ firstName:Thomas , lastName:Carter }]}在这个示例中只有一个名为employees的变量值是包含三个条目的数组每个条目是一个人的记录其中包含名、姓。上面的示例演示如何用括号将记录组合成一个值。当然可以使用相同的语法表示多个值(每个值包含多个记录){ programmers: [{ firstName: Brett, lastName:McLaughlin},{ firstName: Jason, lastName:Hunter },{ firstName: Elliotte, lastName:Harold}],authors: [{ firstName: Isaac, lastName: Asimov},{ firstName: Tad, lastName: Williams},{ firstName: Frank, lastName: Peretti}],musicians: [{ firstName: Eric, lastName: Clapton},{ firstName: Sergei, lastName: Rachmaninoff}] }这里最值得注意的是能够表示多个值每个值进而包含多个值。但是还应该注意在不同的主条目(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 fantasypeople.musicians[3].lastName // Undefined. This refers to the fourth entry, and there isnt onepeople.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表示中国部分省市数据如下中国黑龙江哈尔滨大庆广东广州深圳珠海用JSON表示如下{{name:中国, province:[ { name:黑龙江, cities:{ city:[哈尔滨,大庆] },{name:广东, cities:{ city:[广州,深圳,珠海] }}编码的可读性xml有明显的优势毕竟人类的语言更贴近这样的说明结构。json读起来更像一个数据块读起来就比较费解了。不过我们读起来费解的语言恰恰是适合机器阅读所以通过json的索引.province[0].name就能够读取“黑龙江”这个值。编码的手写难度来说xml还是舒服一些好读当然就好写。不过写出来的字符JSON就明显少很多。去掉空白制表以及换行的话JSON就是密密麻麻的有用数据而xml却包含很多重复的标记字符。JSON在线校验工具http://www.ofmonkey.com/tools/compress