詳解Python使用simplejson模塊解析JSON的方法
1,Json模塊介紹
JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。易于人閱讀和編寫。同時也易于機(jī)器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。JSON采用完全獨(dú)立于語言的文本格式,但是也使用了類似于C語言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語言。
2,Json的格式
2.1,對象:
{name:"Peggy",email:"peggy@gmail.com",homepage:"http://m.fzitv.net"}
{ 屬性 : 值 , 屬性 : 值 , 屬性 : 值 }
2.2,數(shù)組:
是有順序的值的集合。一個數(shù)組開始于"[",結(jié)束于"]",值之間用","分隔。
[
{name:"Peggy",email:"peggy@gmail.com",homepage:"http://m.fzitv.net"}, {name:"Peggy",email:"peggy@gmail.com",homepage:"http://m.fzitv.net"},
{name:"Peggy",email:"peggy@gmail.com",homepage:"http://m.fzitv.net"}
]
3,Json的導(dǎo)入導(dǎo)出
這里的write/dump的含義是將Json對象輸入到一個python_object中,如果python_object是文件,則dump到文件中;如果是對象,則dump到內(nèi)存中。這是序列化。
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'}]
執(zhí)行文件:
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數(shù)據(jù)的解析
假設(shè)對于data.json文件如下:
#test.py
import simplejson as json
ddata = json.loads(file("data.json"))
print ddata
print type(ddata)#<type 'dict'>
其次,我們以讀字典中key 為”data”對應(yīng)的鍵值
>>> ddata['data'] //查看字典的方法! >>>type(ddata['data']) <type 'list'>
發(fā)現(xiàn)ddata[‘data']是一個列表,列表就要用序號來查詢
>>> ddata['data'][0] //查看列表的方法! >>> type(ddata['data'][0]) <type 'dict'>
ddata[‘data']列表的0號元素是個字典。。
好,那我們查查key為idc的鍵值是多少
>>> ddata['data'][0]['idc'] //查看字典的方法! >>> ddata['data'][0]['idc'] //查看字典的方法! '\xe6\x9d\xad\xe5\xb7\x9e\xe5\xbe\xb7\xe8\x83\x9c\xe6\x9c\xba\xe6\x88\xbf' >>> print ddata['data'][0]['idc'] 杭州德勝機(jī)房
5.一些性能討論
簡單測試了一下,如果用JSON,也就是python2.6以上自帶的json處理庫,效率還算可以:
1K的數(shù)據(jù),2.9GHz的CPU,單核下每秒能dump:36898次。大約是pyamf的5倍。但數(shù)據(jù)量較大,約為pyamf的1.67倍(1101/656)。
start_time: 1370747463.77 loop_num: 36898 end_time: 1370747464.78
再看看simplejson,沒有安裝C擴(kuò)展的情況下:

simplejson,沒有安裝C擴(kuò)展,跑出的結(jié)果讓我驚訝:
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'在罐子里發(fā)現(xiàn)了一個銀幣!',},
'3,7' :{'id':'m02', 'Y':10,'msg':u'發(fā)現(xiàn)了十個銀幣!好大一筆錢!',},
'15,5' :{'id':'m03', 'Y':2, 'msg':u'一只老鼠跑了過去',},
'7,4' :{'id':'m04', 'Y':4, 'msg':u'發(fā)現(xiàn)了四個生銹的銀幣……',},
'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
總結(jié):python自帶的json,性能可以接受。simplejson,如果沒有C擴(kuò)展加速,效率極其低下。
- Python使用jsonpath-rw模塊處理Json對象操作示例
- 簡單介紹Python中的JSON模塊
- Python3中的json模塊使用詳解
- Python Json模塊中dumps、loads、dump、load函數(shù)介紹
- 深入解析Python編程中JSON模塊的使用
- Python使用內(nèi)置json模塊解析json格式數(shù)據(jù)的方法
- Python json模塊使用實(shí)例
- Python的標(biāo)準(zhǔn)模塊包json詳解
- Python json模塊dumps、loads操作示例
- Python3內(nèi)置模塊之json編解碼方法小結(jié)【推薦】
- python的json中方法及jsonpath模塊用法分析
相關(guān)文章
python中字符串比較使用is、==和cmp()總結(jié)
在Python中比較字符串最好是使用簡單邏輯操作符,今天為大家講解一下is、==和cmp()使用總結(jié)2018-03-03
Python函數(shù)中參數(shù)是傳遞值還是引用詳解
這篇文章主要介紹了深入了解Python函數(shù)中參數(shù)是傳值還是傳引用,在 C/C++ 中,傳值和傳引用是函數(shù)參數(shù)傳遞的兩種方式,在Python中參數(shù)是如何傳遞的,需要的朋友可以參考下2019-07-07
python GUI計(jì)算器的實(shí)現(xiàn)
這篇文章主要介紹了python gui計(jì)算器的實(shí)現(xiàn),幫助大家更好的理解和學(xué)習(xí)python gui編程,感興趣的朋友可以了解下2020-10-10
Python如何快速生成本項(xiàng)目的requeirments.txt實(shí)現(xiàn)
本文主要介紹了Python如何快速生成本項(xiàng)目的requeirments.txt實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Python while 循環(huán)使用的簡單實(shí)例
下面小編就為大家?guī)硪黄狿ython while 循環(huán)使用的簡單實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06

