python-Json模块【解析Json】

来源:互联网 发布:淘宝搜索黑科技 编辑:程序博客网 时间:2024/04/30 01:33

1,Json模块介绍

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

2,Json的格式

2.1,对象:

[plain] view plaincopy
  1. {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.peggy.com"}  
  2. { 属性 : 值 , 属性 : 值 , 属性 : 值 }  

2.2,数组:

是有顺序的值的集合。一个数组开始于"[",结束于"]",值之间用","分隔。

[plain] view plaincopy
  1. [  
  2. {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.peggy.com"}, {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.peggy.com"},  
  3. {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.peggy.com"}  
  4. ]  

另,值可以是字符串、数字、true、false、null,也可以是对象或数组。这些结构都能嵌套。

3,Json的导入导出

这里的write/dump的含义是将Json对象输入到一个python_object中,如果python_object是文件,则dump到文件中;如果是对象,则dump到内存中。这是序列化。

3.1,读取Json文件

[python] view plaincopy
  1. import simplejson as json  
  2. f = file('table.json')  
  3. source = f.read()  
  4. target = json.JSONDecoder().decode(source)  
  5. print target  

[python] view plaincopy
  1. import simplejson as json  
  2. jsonobject = json.load(file('table.json'))  
  3. print jsonobject  

3.2,显示Json文件

为了显示Json格式好看,原来的Json文件:

[python] view plaincopy
  1. [admin@r42h06016.xy2.aliyun.com]$python readJson.py  
  2. [{'Query''desc zt1;''Message''{"DescibeTableWithPartSpec": "false",  "GetTableMetaString":"{\\"tableName\\":\\"zt1\\",\\"owner\\":\\"1365937150772213\\",\\"createTime\\":1346218114,\\"lastModifiedTime\\":0,\\"columns\\":[{\\"name\\":\\"a\\",\\"type\\":\\"string\\"},{\\"name\\":\\"b\\",\\"type\\":\\"string\\"}],\\"partitionKeys\\":[{\\"name\\":\\"pt\\",\\"type\\":\\"string\\"}]}"}''QueryID''''Result''OK'}]  
执行文件:

[python] view plaincopy
  1. import simplejson as json  
  2. jsonobject = json.load(file('table.json'))  
  3. print json.dumps(jsonobject,sort_keys=True,indent=4)  
显示:

[python] view plaincopy
  1. [admin@r42h06016.xy2.aliyun.com]$python readJson.py  
  2. [  
  3.     {  
  4.         "Message""{\"DescibeTableWithPartSpec\": \"false\",  \"GetTableMetaString\":\"{\\\"tableName\\\":\\\"zt1\\\",\\\"owner\\\":\\\"1365937150772213\\\",\\\"createTime\\\":1346218114,\\\"lastModifiedTime\\\":0,\\\"columns\\\":[{\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"string\\\"}],\\\"partitionKeys\\\":[{\\\"name\\\":\\\"pt\\\",\\\"type\\\":\\\"string\\\"}]}\"}",  
  5.         "Query""desc zt1;",  
  6.         "QueryID": "",  
  7.         "Result""OK"  
  8.     }  
  9. ]  


3.3,json模块示例:

[python] view plaincopy
  1. import json  
  2. # Converting Python to JSON  
  3. json_object = json.write( python_object )  
  4. # Converting JSON to Python  
  5. python_object = json.read( json_object )  

3.4,simplejson模块 示例:

[python] view plaincopy
  1. import simplejson  
  2. # Converting Python to JSON  
  3. json_object = simplejson.dumps( python_object )  
  4. # Converting JSON to Python  
  5. python_object = simplejson.loads( json_object )  

其中的json_object也可以是文件名比如file(“tmp/table.json”)

4,Json数据的解析

假设对于data.json文件如下:

[plain] view plaincopy
  1. {'isSuccess': True, 'errorMsg': '', 'total': 1, 'data': [{'isOnline': True, 'idc': '\xe6\x9d\xad\xe5\xb7\x9e\xe5\xbe\xb7\xe8\x83\x9c\xe6\x9c\xba\xe6\x88\xbf', 'assetsNum': 'B50070100007003', 'responsibilityPerson': '\xe5\xbc\xa0\xe4\xb9\x8b\xe8\xaf\x9a', 'deviceModel': 'PowerEdge 1950', 'serviceTag': '729HH2X', 'ip': '172.16.20.163', 'hostname': 'hzshterm1.alibaba.com', 'manageIp': '172.31.58.223', 'cabinet': 'H05', 'buyTime': '2009-06-29', 'useState': '\xe4\xbd\xbf\xe7\x94\xa8\xe4\xb8\xad', 'memoryInfo': {'amount': 4, 'size': 8192}, 'cpuInfo': {'coreNum': 8, 'l2CacheSize': 6144, 'amount': 2, 'model': 'Intel(R) Xeon(R) CPU           E5405  @ 2.00GHz', 'masterFrequency': 1995}, 'cabinetPositionNum': '', 'outGuaranteeTime': '', 'logicSite': '\xe4\xb8\xad\xe6\x96\x87\xe7\xab\x99'}]}  
首先导入该文件,建立Json对象,并查看类型,已经是dict类型了。

[python] view plaincopy
  1. #test.py  
  2. import simplejson as json  
  3. ddata = json.loads(file("data.json"))  
  4. print ddata  
  5. print type(ddata)#<type 'dict'>  
其次,我们以读字典中key 为”data”对应的键值
>>> ddata['data']    //查看字典的方法!

[python] view plaincopy
  1. >>>type(ddata['data'])  
  2. <type 'list'>  
发现ddata[‘data’]是一个列表,列表就要用序号来查询
>>> ddata['data'][0]         //查看列表的方法!

[python] view plaincopy
  1. >>> type(ddata['data'][0])  
  2. <type 'dict'>  

ddata[‘data’]列表的0号元素是个字典。。
好,那我们查查key为idc的键值是多少
>>> ddata['data'][0]['idc']          //查看字典的方法!

[python] view plaincopy
  1. >>> ddata['data'][0]['idc']          //查看字典的方法!  
  2. '\xe6\x9d\xad\xe5\xb7\x9e\xe5\xbe\xb7\xe8\x83\x9c\xe6\x9c\xba\xe6\x88\xbf'  
  3. >>> print ddata['data'][0]['idc']     
  4. 杭州德胜机房  


0 0
原创粉丝点击