本文實(shí)例分析了python對(duì)json的相關(guān)操作。分享給大家供大家參考,具體如下:
什么是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ǔ)言。
JSON建構(gòu)于兩種結(jié)構(gòu):
“名稱/值”對(duì)的集合(A collection of name/value pairs)。不同的語(yǔ)言中,它被理解為對(duì)象(object),紀(jì)錄(record),結(jié)構(gòu)(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關(guān)聯(lián)數(shù)組 (associative array)。
值的有序列表(An ordered list of values)。在大部分語(yǔ)言中,它被理解為數(shù)組(array)。
這些都是常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)。事實(shí)上大部分現(xiàn)代計(jì)算機(jī)語(yǔ)言都以某種形式支持它們。這使得一種數(shù)據(jù)格式在同樣基于這些結(jié)構(gòu)的編程語(yǔ)言之間交換成為可能。
json官方說(shuō)明參見(jiàn):http://json.org/
Python操作json的標(biāo)準(zhǔn)api庫(kù)參考:http://docs.python.org/library/json.html
對(duì)簡(jiǎn)單數(shù)據(jù)類型的encoding 和 decoding:
使用簡(jiǎn)單的json.dumps方法對(duì)簡(jiǎn)單數(shù)據(jù)類型進(jìn)行編碼,例如:
import jsonobj = [[1,2,3],123,123.123,'abc',{'key1':(1,2,3),'key2':(4,5,6)}]encodedjson = json.dumps(obj)print repr(obj)print encodedjson
輸出:
[[1, 2, 3], 123, 123.123, 'abc', {'key2': (4, 5, 6), 'key1': (1, 2, 3)}][[1, 2, 3], 123, 123.123, "abc", {"key2": [4, 5, 6], "key1": [1, 2, 3]}]
通過(guò)輸出的結(jié)果可以看出,簡(jiǎn)單類型通過(guò)encode之后跟其原始的repr()輸出結(jié)果非常相似,但是有些數(shù)據(jù)類型進(jìn)行了改變,例如上例中的元組則轉(zhuǎn)換為了列表。在json的編碼過(guò)程中,會(huì)存在從python原始類型向json類型的轉(zhuǎn)化過(guò)程,具體的轉(zhuǎn)化對(duì)照如下:
json.dumps()方法返回了一個(gè)str對(duì)象encodedjson,我們接下來(lái)在對(duì)encodedjson進(jìn)行decode,得到原始數(shù)據(jù),需要使用的json.loads()函數(shù):
decodejson = json.loads(encodedjson)print type(decodejson)print decodejson[4]['key1']print decodejson
輸出:
<type 'list'>[1, 2, 3][[1, 2, 3], 123, 123.123, u'abc', {u'key2': [4, 5, 6], u'key1': [1, 2, 3]}]
loads方法返回了原始的對(duì)象,但是仍然發(fā)生了一些數(shù)據(jù)類型的轉(zhuǎn)化。比如,上例中‘a(chǎn)bc'轉(zhuǎn)化為了unicode類型。從json到python的類型轉(zhuǎn)化對(duì)照如下:
json.dumps方法提供了很多好用的參數(shù)可供選擇,比較常用的有sort_keys(對(duì)dict對(duì)象進(jìn)行排序,我們知道默認(rèn)dict是無(wú)序存放的),separators,indent等參數(shù)。
新聞熱點(diǎn)
疑難解答
圖片精選