最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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"} 
] 

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

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文件如下:

復(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對象,并查看類型,已經(jīng)是dict類型了。
#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ò)展的情況下:

2016324173247058.jpg (592×62)

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ò)展加速,效率極其低下。

相關(guān)文章

  • Gradio中button組件的基本使用方式

    Gradio中button組件的基本使用方式

    Gradio中的button組件用于實(shí)現(xiàn)點(diǎn)擊事件,通過click事件綁定函數(shù)來處理值的變化,點(diǎn)擊時,函數(shù)接收組件的值作為輸入,返回新的值或更新組件的屬性,示例代碼展示了如何在點(diǎn)擊按鈕時修改文本框的值并控制按鈕的可見性
    2024-11-11
  • python中字符串比較使用is、==和cmp()總結(jié)

    python中字符串比較使用is、==和cmp()總結(jié)

    在Python中比較字符串最好是使用簡單邏輯操作符,今天為大家講解一下is、==和cmp()使用總結(jié)
    2018-03-03
  • python中print輸出有空格如何解決

    python中print輸出有空格如何解決

    這篇文章主要介紹了python中print輸出有空格的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python基礎(chǔ)之文件操作

    python基礎(chǔ)之文件操作

    這篇文章主要介紹了python文件操作,實(shí)例分析了Python中返回一個返回值與多個返回值的方法,需要的朋友可以參考下
    2021-10-10
  • Python函數(shù)中參數(shù)是傳遞值還是引用詳解

    Python函數(shù)中參數(shù)是傳遞值還是引用詳解

    這篇文章主要介紹了深入了解Python函數(shù)中參數(shù)是傳值還是傳引用,在 C/C++ 中,傳值和傳引用是函數(shù)參數(shù)傳遞的兩種方式,在Python中參數(shù)是如何傳遞的,需要的朋友可以參考下
    2019-07-07
  • python中定義結(jié)構(gòu)體的方法

    python中定義結(jié)構(gòu)體的方法

    Python中沒有專門定義結(jié)構(gòu)體的方法,但可以使用class標(biāo)記定義類來代替結(jié)構(gòu)體,其成員可以在構(gòu)造函數(shù)__init__中定義,具體方法如下,特分享下,方便需要的朋友
    2013-03-03
  • python GUI計(jì)算器的實(shí)現(xiàn)

    python GUI計(jì)算器的實(shí)現(xiàn)

    這篇文章主要介紹了python gui計(jì)算器的實(shí)現(xiàn),幫助大家更好的理解和學(xué)習(xí)python gui編程,感興趣的朋友可以了解下
    2020-10-10
  • 一篇文章了解Python中常見的序列化操作

    一篇文章了解Python中常見的序列化操作

    這篇文章主要給大家介紹了軟玉Python中常見的序列化操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python如何快速生成本項(xiàng)目的requeirments.txt實(shí)現(xiàn)

    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í)例

    Python while 循環(huán)使用的簡單實(shí)例

    下面小編就為大家?guī)硪黄狿ython while 循環(huán)使用的簡單實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06

最新評論

福泉市| 弥渡县| 碌曲县| 阿拉尔市| 利津县| 东方市| 门头沟区| 武定县| 广丰县| 红桥区| 青川县| 土默特左旗| 济源市| 达日县| 天峻县| 镇巴县| 大名县| 巍山| 永登县| 洪江市| 海原县| 班戈县| 六枝特区| 阜康市| 疏勒县| 增城市| 广水市| 新安县| 蒙城县| 乐都县| 崇仁县| 木里| 蒙自县| 安塞县| 崇礼县| 武乡县| 乌什县| 伊川县| 嘉峪关市| 上蔡县| 吉木萨尔县|