最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

详解Python使用simplejson模块解析JSON的方法

来源:动视网 责编:小采 时间:2020-11-27 14:35:42
文档

详解Python使用simplejson模块解析JSON的方法

详解Python使用simplejson模块解析JSON的方法:1,Json模块介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1
推荐度:
导读详解Python使用simplejson模块解析JSON的方法:1,Json模块介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1
 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,对象:

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

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

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

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文件
为了显示Json格式好看,原来的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数据的解析
假设对于data.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)# 

其次,我们以读字典中key 为”data”对应的键值

>>> ddata['data'] //查看字典的方法!

>>>type(ddata['data']) 
 

发现ddata[‘data']是一个列表,列表就要用序号来查询

>>> ddata['data'][0] //查看列表的方法!

>>> type(ddata['data'][0]) 
 

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

>>> ddata['data'][0]['idc'] //查看字典的方法!

>>> ddata['data'][0]['idc'] //查看字典的方法! 
'xe6x9dxadxe5xb7x9exe5xbexb7xe8x83x9cxe6x9cxbaxe6x88xbf' 
>>> print ddata['data'][0]['idc'] 
杭州德胜机房 

5.一些性能讨论

简单测试了一下,如果用JSON,也就是python2.6以上自带的json处理库,效率还算可以:
1K的数据,2.9GHz的CPU,单核下每秒能dump:368次。大约是pyamf的5倍。但数据量较大,约为pyamf的1.67倍(1101/656)。

start_time: 1370747463.77
loop_num: 368
end_time: 13707474.78


再看看simplejson,没有安装C扩展的情况下:

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('清新,淡雅,花香', 'utf-8'), 
 '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,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 


总结:python自带的json,性能可以接受。simplejson,如果没有C扩展加速,效率极其低下。

文档

详解Python使用simplejson模块解析JSON的方法

详解Python使用simplejson模块解析JSON的方法:1,Json模块介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1
推荐度:
标签: python json simplejson
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top