python-Json模塊

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,對象:
[plain] view plaincopy 
{name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.peggy.com"}  
{ 屬性 : 值 , 屬性 : 值 , 屬性 : 值 }  
2.2,數組:
是有順序的值的集合。一個數組開始於"[",結束於"]",值之間用","分隔。
[plain] view plaincopy 
[  
{name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.peggy.com"}, {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.peggy.com"},  
{name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.peggy.com"}  
]  
另,值能夠是字符串、數字、true、false、null,也能夠是對象或數組。這些結構都能嵌套。
3,Json的導入導出
這裏的write/dump的含義是將Json對象輸入到一個python_object中,若是python_object是文件,則dump到文件中;若是是對象,則dump到內存中。這是序列化。

3.1,讀取Json文件
[python] view plaincopy 
import simplejson as json  
f = file('table.json')  
source = f.read()  
target = json.JSONDecoder().decode(source)  
print target  
[python] view plaincopy 
import simplejson as json  
jsonobject = json.load(file('table.json'))  
print jsonobject  

3.2,顯示Json文件
爲了顯示Json格式好看,原來的Json文件:

[python] view plaincopy 
[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'}]  
執行文件:
[python] view plaincopy 
import simplejson as json  
jsonobject = json.load(file('table.json'))  
print json.dumps(jsonobject,sort_keys=True,indent=4)  
顯示:
[python] view plaincopy 
[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模塊示例:
[python] view plaincopy 
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模塊 示例:
[python] view plaincopy 
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文件以下:

[plain] view plaincopy 
{'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'}]}  
首先導入該文件,創建Json對象,並查看類型,已是dict類型了。
[python] view plaincopy 
#test.py  
import simplejson as json  
ddata = json.loads(file("data.json"))  
print ddata  
print type(ddata)#<type 'dict'>  
其次,咱們以讀字典中key 爲」data」對應的鍵值
>>> ddata['data']    //查看字典的方法!
[python] view plaincopy 
>>>type(ddata['data'])  
<type 'list'>  
發現ddata[‘data’]是一個列表,列表就要用序號來查詢
>>> ddata['data'][0]         //查看列表的方法!
[python] view plaincopy 
>>> type(ddata['data'][0])  
<type 'dict'>  

ddata[‘data’]列表的0號元素是個字典。。
好,那咱們查查key爲idc的鍵值是多少
>>> ddata['data'][0]['idc']          //查看字典的方法!
[python] view plaincopy 
>>> 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]['id
相關文章
相關標籤/搜索