- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON有两种结构:第一种就是“名称/值”对的集合。在python中相当于字典类型,在其他语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associative array)。第二种就是值的有序列表。在大部分语言中,它被理解为数组(array)。这两种都是常见的数据结构。大部分语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。json官方说明参见:/Python操作json的标准api库参考:/library/json.html对简单数据类型的encoding 和 decoding:使用简单的json.dumps方法对简单数据类型进行编码,例如:import jsonobj = [[1,2,3],123,123.123,abc,{key1:(1,2,3),key2:(4,5,6)}]encodedjson = json.dumps(obj)print repr(obj)print encodedjson输出:[[1, 2, 3], 123, 123.123, abc, {key2: (4, 5, 6), key1: (1, 2, 3)}][[1, 2, 3], 123, 123.123, abc, {key2: [4, 5, 6], key1: [1, 2, 3]}]通过输出的结果可以看出,简单类型通过encode之后跟其原始的repr()输出结果非常相似,但是有些数据类型进行了改变,例如上例中的元组则转换为了列表。在json的编码过程中,会存在从python原始类型向json类型的转化过程,具体的转化对照如下:json.dumps()方法返回了一个str对象encodedjson,我们接下来在对encodedjson进行decode,得到原始数据,需要使用的json.loads()函数:decodejson = json.loads(encodedjson)print type(decodejson)print decodejson[4][key1]print decodejson输出:type list[1, 2, 3][[1, 2, 3], 123, 123.123, uabc, {ukey2: [4, 5, 6], ukey1: [1, 2, 3]}]loads方法返回了原始的对象,但是仍然发生了一些数据类型的转化。比如,上例中‘abc’转化为了unicode类型。从json到python的类型转化对照如下:json.dumps方法提供了很多好用的参数可供选择,比较常用的有sort_keys(对dict对象进行排序,我们知道默认dict是无序存放的),separators,indent等参数。排序功能使得存储的数据更加有利于观察,也使得对json输出的对象进行比较,例如:data1 = {b:789,c:456,a:123}data2 = {a:123,b:789,c:456}d1 = json.dumps(data1,sort_keys=True)d2 = json.dumps(data2)d3 = json.dumps(data2,sort_keys=True)print d1print d2print d3print d1==d2print d1==d3输出:{a: 123, b: 789, c: 456}{a: 123, c: 456, b: 789}{a: 123, b: 789, c: 456}FalseTrue上例中,本来data1和data2数据应该是一样的,但是由于dict存储的无序特性,造成两者无法比较。因此两者可以通过排序后的结果进行存储就避免了数据比较不一致的情况发生,但是排序后再进行存储,系统必定要多做一些事情,也一定会因此造成一定的性能消耗,所以适当排序是很重要的。indent参数是缩进的意思,它可以使得数据存储的格式变得更加优雅。data1 = {b:789,c:456,a:123}d1 = json.dumps(data1,sort_keys=True,indent=4)print d1输出:{ a: 123, b: 789, c: 456}输出的数据被格式化之后,变得可读性更强,但是却是通过增加一些冗余的空白格来进行填充的。json主要是作为一种数据通信的格式存在的,而网络通信是很在乎数据的大小的,无用的空格会占据很多通信带宽,所以适当时候也要对数据
文档评论(0)