欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Python使用simplejson模塊解析JSON的方法

 更新時(shí)間:2016年03月24日 17:32:49   作者:gexiaobaoHelloWorld  
這篇文章主要介紹了Python使用simplejson模塊解析JSON的方法,實(shí)例代碼基于Pyhton2.x版本,文中最后還附了關(guān)于simplejson模塊的一些性能放面的討論,需要的朋友可以參考下

1,Json模塊介紹
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。易于人閱讀和編寫(xiě)。同時(shí)也易于機(jī)器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個(gè)子集。JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類似于C語(yǔ)言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。

2,Json的格式
2.1,對(duì)象:

{name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.dbjr.com.cn"} 
{ 屬性 : 值 , 屬性 : 值 , 屬性 : 值 } 

2.2,數(shù)組:
是有順序的值的集合。一個(gè)數(shù)組開(kāi)始于"[",結(jié)束于"]",值之間用","分隔。

[ 
{name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.dbjr.com.cn"}, {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.dbjr.com.cn"}, 
{name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.dbjr.com.cn"} 
] 

另,值可以是字符串、數(shù)字、true、false、null,也可以是對(duì)象或數(shù)組。這些結(jié)構(gòu)都能嵌套。

3,Json的導(dǎo)入導(dǎo)出
這里的write/dump的含義是將Json對(duì)象輸入到一個(gè)python_object中,如果python_object是文件,則dump到文件中;如果是對(duì)象,則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格式好看,原來(lái)的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è)對(duì)于data.json文件如下:

復(fù)制代碼 代碼如下:

{'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'}]} 
首先導(dǎo)入該文件,建立Json對(duì)象,并查看類型,已經(jīng)是dict類型了。
#test.py 
import simplejson as json 
ddata = json.loads(file("data.json")) 
print ddata 
print type(ddata)#<type 'dict'> 

其次,我們以讀字典中key 為”data”對(duì)應(yīng)的鍵值

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

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

發(fā)現(xiàn)ddata[‘data']是一個(gè)列表,列表就要用序號(hào)來(lái)查詢

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

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

ddata[‘data']列表的0號(hào)元素是個(gè)字典。。
好,那我們查查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.一些性能討論

簡(jiǎn)單測(cè)試了一下,如果用JSON,也就是python2.6以上自帶的json處理庫(kù),效率還算可以:
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,沒(méi)有安裝C擴(kuò)展的情況下:

2016324173247058.jpg (592×62)

simplejson,沒(méi)有安裝C擴(kuò)展,跑出的結(jié)果讓我驚訝:

start_time: 1370748132.87
loop_num: 1361
end_time:  1370748133.88

效率如此之低下。
 
下面是測(cè)試代碼:

#! /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)了一個(gè)銀幣!',}, 
    '3,7' :{'id':'m02', 'Y':10,'msg':u'發(fā)現(xiàn)了十個(gè)銀幣!好大一筆錢!',}, 
    '15,5' :{'id':'m03', 'Y':2, 'msg':u'一只老鼠跑了過(guò)去',}, 
    '7,4' :{'id':'m04', 'Y':4, 'msg':u'發(fā)現(xiàn)了四個(gè)生銹的銀幣……',}, 
    '2,12' :{'id':'m05', 'Y':6, 'msg':u'六個(gè)閃亮的銀幣!',}, 
  },   
   
} 
 
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,如果沒(méi)有C擴(kuò)展加速,效率極其低下。

相關(guān)文章

  • python使用redis模塊來(lái)跟redis實(shí)現(xiàn)交互

    python使用redis模塊來(lái)跟redis實(shí)現(xiàn)交互

    這篇文章主要介紹了python使用redis模塊來(lái)跟redis實(shí)現(xiàn)交互,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • python修改字典內(nèi)key對(duì)應(yīng)值的方法

    python修改字典內(nèi)key對(duì)應(yīng)值的方法

    這篇文章主要介紹了python修改字典內(nèi)key對(duì)應(yīng)值的方法,涉及Python中字典賦值的相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • python 檢測(cè)圖片是否有馬賽克

    python 檢測(cè)圖片是否有馬賽克

    這篇文章主要介紹了python 如何檢測(cè)圖片是否有馬賽克,幫助大家更好的理解和使用python處理圖片,感興趣的朋友可以了解下
    2020-12-12
  • 詳解Python 定時(shí)框架 Apscheduler原理及安裝過(guò)程

    詳解Python 定時(shí)框架 Apscheduler原理及安裝過(guò)程

    Apscheduler是一個(gè)非常強(qiáng)大且易用的類庫(kù),可以方便我們快速的搭建一些強(qiáng)大的定時(shí)任務(wù)或者定時(shí)監(jiān)控類的調(diào)度系統(tǒng),這篇文章主要介紹了Python 定時(shí)框架 Apscheduler ,需要的朋友可以參考下
    2019-06-06
  • python關(guān)鍵字傳遞參數(shù)實(shí)例分析

    python關(guān)鍵字傳遞參數(shù)實(shí)例分析

    在本篇文章里小編給大家整理的是一篇關(guān)于python關(guān)鍵字傳遞參數(shù)實(shí)例分析內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-06-06
  • python合并文本文件示例

    python合并文本文件示例

    這篇文章主要介紹了python合并文本文件示例,需要的朋友可以參考下
    2014-02-02
  • python3之微信文章爬蟲(chóng)實(shí)例講解

    python3之微信文章爬蟲(chóng)實(shí)例講解

    下面小編就為大家?guī)?lái)一篇python3之微信文章爬蟲(chóng)實(shí)例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • 對(duì)python 生成拼接xml報(bào)文的示例詳解

    對(duì)python 生成拼接xml報(bào)文的示例詳解

    今天小編就為大家分享一篇對(duì)python 生成拼接xml報(bào)文的示例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 學(xué)python安裝的軟件總結(jié)

    學(xué)python安裝的軟件總結(jié)

    在本篇文章里小編給大家整理了是關(guān)于學(xué)python安裝什么軟件的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們學(xué)習(xí)下。
    2019-10-10
  • 從請(qǐng)求到響應(yīng)過(guò)程中django都做了哪些處理

    從請(qǐng)求到響應(yīng)過(guò)程中django都做了哪些處理

    這篇文章主要給大家介紹了關(guān)于從請(qǐng)求到響應(yīng)過(guò)程中django都做了哪些處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08

最新評(píng)論