详解Python使用simplejson模块解析JSON的方法
1,Json模块介绍 2,Json的格式 {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.aspzz.cn"} { 属性 : 值,属性 : 值,属性 : 值 } 2.2,数组: [ {name:"Peggy",homepage:"http://www.aspzz.cn"},{name:"Peggy",homepage:"http://www.aspzz.cn"} ] 另,值可以是字符串、数字、true、false、null,也可以是对象或数组。这些结构都能嵌套。
3,Json的导入导出 3.1,读取Json文件 import simplejson as json f = file('table.json') source = f.read() target = json.JSONDecoder().decode(source) print target import simplejson as json jsonobject = json.load(file('table.json')) print jsonobject 3.2,显示Json文件 [admin@r42h06016.xy2.aliyun.com]$python readJson.py [{'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'}] 执行文件: import simplejson as json jsonobject = json.load(file('table.json')) print json.dumps(jsonobject,sort_keys=True,indent=4) 显示: [admin@r42h06016.xy2.aliyun.com]$python readJson.py [ { "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"}]}"}","Query": "desc zt1;","QueryID": "","Result": "OK" } ] 3.3,json模块示例: import json # Converting Python to JSON json_object = json.write( python_object ) # Converting JSON to Python python_object = json.read( json_object ) 3.4,simplejson模块 示例: import simplejson # Converting Python to JSON json_object = simplejson.dumps( python_object ) # Converting JSON to Python python_object = simplejson.loads( json_object ) 其中的json_object也可以是文件名比如file(“tmp/table.json”) 4,Json数据的解析 复制代码 代码如下: {'isSuccess': True,'errorMsg': '','total': 1,'data': [{'isOnline': True,'idc': 'xe6x9dxadxe5xb7x9exe5xbexb7xe8x83x9cxe6x9cxbaxe6x88xbf','assetsNum': 'B50070100007003','responsibilityPerson': 'xe5xbcxa0xe4xb9x8bxe8xafx9a','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': 'xe4xbdxbfxe7x94xa8xe4xb8xad','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': 'xe4xb8xadxe6x96x87xe7xabx99'}]}
首先导入该文件,建立Json对象,并查看类型,已经是dict类型了。
#test.py import simplejson as json ddata = json.loads(file("data.json")) print ddata print type(ddata)#<type 'dict'> 其次,我们以读字典中key 为”data”对应的键值 >>> ddata['data'] //查看字典的方法! >>>type(ddata['data']) <type 'list'> 发现ddata[‘data']是一个列表,列表就要用序号来查询 >>> ddata['data'][0] //查看列表的方法! >>> type(ddata['data'][0]) <type 'dict'> ddata[‘data']列表的0号元素是个字典。。 >>> ddata['data'][0]['idc'] //查看字典的方法! >>> ddata['data'][0]['idc'] //查看字典的方法! 'xe6x9dxadxe5xb7x9exe5xbexb7xe8x83x9cxe6x9cxbaxe6x88xbf' >>> print ddata['data'][0]['idc'] 杭州德胜机房 5.一些性能讨论 简单测试了一下,如果用JSON,也就是python2.6以上自带的json处理库,效率还算可以: start_time: 1370747463.77 loop_num: 36898 end_time: 1370747464.78 simplejson,没有安装C扩展,跑出的结果让我惊讶: start_time: 1370748132.87 loop_num: 1361 end_time: 1370748133.88 效率如此之低下。 #! /usr/bin/env python #coding=utf-8 import time import json test_data = { 'baihe': { 'name': unicode('百合','utf-8'),'say': unicode('清新,淡雅,花香','grow_time': 0.5,'fruit_time': 0.5,'super_time': 0.5,'total_time': 1,'buy':{'gold':2,},'harvest_fruit': 1,'harvest_super': 1,'sale': 1,'level_need': 0,'experience' : 2,'exp_fruit': 1,'exp_super': 1,'used': True,'1':{ 'interval' : 0.3,'probability' : { '98': {'chips' : (5,25),'2' : {'gem' : (1,1),'2':{ 'unlock' : {'chips':1000,'FC':10,'interval' : 12,'probability' : { '70': {'chips' : (120,250),'20': {'gem' : (1,'10': {'gem' : (2,2),'one':{ '10,5' :{'id':'m01','Y':1,'msg':u'在罐子里发现了一个银币!','3,7' :{'id':'m02','Y':10,'msg':u'发现了十个银币!好大一笔钱!','15,5' :{'id':'m03','Y':2,'msg':u'一只老鼠跑了过去','7,4' :{'id':'m04','Y':4,'msg':u'发现了四个生锈的银币……','2,12' :{'id':'m05','Y':6,'msg':u'六个闪亮的银币!',} start_time = time.time() print "start_time:",start_time j = 1 while True: j += 1 a = json.dumps(test_data) data_length = len(a) end_time = time.time() if end_time - start_time >= 1 : break print "loop_num:",j print "end_time: ",end_time print data_length,a (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |