Json作为一种轻量级的数据传输方式,在平时的开发中使用的非常广泛,本人也是在开发过程中使用的较多,但是就像最近看的一部电影中讲到的一样,有时候就是和你天天在一起你觉得最熟悉的人其实你并不熟悉。今天去参加了一个面试,中间问到了json的相关问题,顿时就有这种体会了。在此详细总结一下也是提醒自己以后学习的过程中不要总追求最新的、最前沿的,把和自己最熟悉的最普通的真正弄熟悉才是最大的提示。
关于JSON维基百科这样定义的:
JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管JSON是Javascript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。
存在形式如下(具体参考RFC 4627):
虽然在1999年的《JavaScript Programming Language, Standard ECMA-262 3rd Edition》中就讲到JSON,是其子集和,可以在Javascript中用eval函数解析调用:
var txt = ‘{"table": [‘ + ‘{"a":"123","b":"456","c":"678"},‘+ ‘{"aa":"123","bb":"456","cc":"678"} ]}‘; var obj = eval( "(" + txt + ")" ); //然后可使用javascript对象 obj.table[0].a
JSON是存储和交换文本信息的一种语法,与XML相比主要有如下优点:
尽管XML拥有跨平台、跨语言的优势,但是除非应用Web Sevice,否则一般情况下的Web开发,在服务器端和客户端生成和处理XML都需要相比JSON来说更加复杂的代码,降低了开发效率。同时对于大多数Web开发来说,不需要复杂的XML来传输数据,其扩展性很少具有优势。
前面提到与XML一样,JSON也是纯文本数据格式,其格式非常简单。归根结底,最终都是存储字符串string,这里string的完整表示结构如下:
JSON文本中的字符串必须以双引号括起来,需要将双引号(")、斜杠(/)、反斜杠(\)和控制字符进行转义,其他的Unicode字符使用\Uxxxx的形式即可直接输出。
一个数值可以用下图表示其结构:
正负号、小数、科学计数法,这些都是可以在JSON文本中直接使用,而且数值类型不用引号括起来。
Boolean类型使用true、false表示,也是没有用引号括起来的,否则会被视为字符串。
至于数组([])、对象({})都是对上述基本类型的封装,各个键名和值直接使用冒号分割,各个键值对之间使用逗号分割。
服务器端的语言一般都封装了json输出库函数。这些函数的实现也就是构造了符合JSON格式的字符串,但是中间最关键的问题是处理好特殊字符。
必须使用双引号而不能是单引号表示字符串,对每个需要进行转义的字符(\、\\、/、\b、\f、\n、\r、\t)进行转义,对输出结果的MINE类型使用“Content-Type: application/json;charset=UTF-8”。除此之外,需要进行递归调用,将带转换的对象按照层级关系转换成对应的JSON文本。
JSON最开始就被广泛应用于Web2.0的各种开发,在Web数据传输方面起着重要的作用。现今,在非关系型的数据库中应用也较广泛,基于文档存储的NoSQL的存储键值对的非关系型数据库就选择JSON 格式来作为其数据存储格式。
原文:http://blog.csdn.net/u010487568/article/details/25714645