python操作json

json介紹

說明:JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式吨艇。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集立肘。 JSON采用完全獨立于語言的文本格式掷邦,但是也使用了類似于C語言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語言箱沦。易于人閱讀和編寫,同時也易于機器解析和生成雇庙。

關(guān)于json更為詳細(xì)的內(nèi)容谓形,可以參考其官方網(wǎng)站:http://www.json.org
從官方網(wǎng)站上摘取部分,了解一下json的結(jié)構(gòu):
JSON建構(gòu)于兩種結(jié)構(gòu):

  • 名稱/值”對的集合(A collection of name/value pairs)疆前。不同的語言中寒跳,它被理解為對象(object),紀(jì)錄(record)竹椒,結(jié)構(gòu)(struct)冯袍,字典(dictionary),哈希表(hash table)碾牌,有鍵列表(keyed list)康愤,或者關(guān)聯(lián)數(shù)組 (associative array)。
  • 值的有序列表(An ordered list of values)舶吗。在大部分語言中征冷,它被理解為數(shù)組(array)。

  • python標(biāo)準(zhǔn)庫中有json模塊誓琼,主要是執(zhí)行序列化和反序列化功能:

序列化:encoding检激,把一個python對象編碼轉(zhuǎn)化成json字符串肴捉,json.dumps()
反序列化:decoding,把json格式字符串解碼轉(zhuǎn)換為python數(shù)據(jù)對象叔收,json.loads()

一般json

查看json使用方法

>>> import json
>>> json.__all__
['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONEncoder']

encoding: dumps()

>>> data = [{"name":"qiwsir", "lang":("python", "english"), "age":40}]
>>> print data
[{'lang': ('python', 'english'), 'age': 40, 'name': 'qiwsir'}]
>>> data_json = json.dumps(data)
>>> print data_json
[{"lang": ["python", "english"], "age": 40, "name": "qiwsir"}]

encoding的操作是比較簡單的齿穗,請注意觀察data和data_json的不同——lang的value從元組變成了列表,還有不同:

>>> type(data_json)
<type 'str'>
>>> type(data)
<type 'list'>

將python對象轉(zhuǎn)化為json類型饺律,是按照下表所示對照關(guān)系轉(zhuǎn)化的:

python json
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null

decoding: loads()

decoding的過程也像上面一樣簡單:

>>> new_data = json.loads(data_json)
>>> new_data
[{u'lang': [u'python', u'english'], u'age': 40, u'name': u'qiwsir'}]

需要注意的是窃页,解碼之后,并沒有將元組還原复濒。

解碼的數(shù)據(jù)類型對應(yīng)關(guān)系:

json python
object dict
array list, tuple
string str, unicode
number(int) int, long
number(read) float
true True
false False
null None

上面的data都不是很長脖卖,還能湊合閱讀,如果很長了巧颈,閱讀就有難度了畦木。所以,json的dumps()提供了可選參數(shù)砸泛,利用它們能在輸出上對人更友好(這對機器是無所謂的)十籍。

>>> data={'a':'aaa', 'b':'bbb', 'c':[{'c1':'cc1', 'c2':'cc2'}]}
>>> data_j = json.dumps(data, sort_keys=True, indent=2)
>>> print data_j
{
  "a": "aaa", 
  "b": "bbb", 
  "c": [
    {
      "c1": "cc1", 
      "c2": "cc2"
    }
  ]
}

sort_keys=True意思是按照鍵的字典順序排序,indent=2是讓每個鍵值對顯示的時候唇礁,以縮進兩個字符對齊妓雾。這樣的視覺效果好多了。

對于字典垒迂,json會假設(shè)key是字符串(字典中的任何非字符串key都會在編碼時轉(zhuǎn)換為字符串)械姻,要符合JSON規(guī)范,應(yīng)該只對python列表和字典進行編碼机断。此外楷拳,在WEB應(yīng)用中,把最頂層對象定義為字典是一種標(biāo)準(zhǔn)做法吏奸。

大json字符串

如果數(shù)據(jù)不是很大欢揖,上面的操作足夠了。但是奋蔚,上面操作是將數(shù)據(jù)都讀入內(nèi)存她混,如果太大就不行了。把數(shù)據(jù)放入文件泊碑,你可以使用 json.dump() 和 json.load() 來編碼和解碼JSON坤按。

dump功能

# 將數(shù)據(jù)通過特殊的形式轉(zhuǎn)換為所有程序語言都認(rèn)識的字符串,并寫入文件
>>> with open('tmp.json', 'w') as f:
...   json.dump(data_j, f)
... 

> cat tmp.json
{"a": "aaa", "c": [{"c2": "cc2", "c1": "cc1"}], "b": "bbb"}

load功能

>>> with open('tmp.json', 'r') as f:
...   data = json.load(f)
... 
>>> print data
{u'a': u'aaa', u'c': [{u'c2': u'cc2', u'c1': u'cc1'}], u'b': u'bbb'}
  • 從數(shù)據(jù)文件中讀取數(shù)據(jù),并將json編碼的字符串轉(zhuǎn)換為python的數(shù)據(jù)結(jié)構(gòu)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末馒过,一起剝皮案震驚了整個濱河市臭脓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腹忽,老刑警劉巖来累,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砚作,死亡現(xiàn)場離奇詭異,居然都是意外死亡嘹锁,警方通過查閱死者的電腦和手機葫录,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來领猾,“玉大人米同,你說我怎么就攤上這事×鲈耍” “怎么了窍霞?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵匠题,是天一觀的道長拯坟。 經(jīng)常有香客問我,道長韭山,這世上最難降的妖魔是什么郁季? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮钱磅,結(jié)果婚禮上梦裂,老公的妹妹穿的比我還像新娘。我一直安慰自己盖淡,他們只是感情好年柠,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著褪迟,像睡著了一般冗恨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上味赃,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天掀抹,我揣著相機與錄音,去河邊找鬼心俗。 笑死傲武,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的城榛。 我是一名探鬼主播揪利,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼狠持!你這毒婦竟也來了土童?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤工坊,失蹤者是張志新(化名)和其女友劉穎献汗,沒想到半個月后敢订,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡罢吃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年楚午,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尿招。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡矾柜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出就谜,到底是詐尸還是另有隱情怪蔑,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布丧荐,位于F島的核電站缆瓣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏虹统。R本人自食惡果不足惜弓坞,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望车荔。 院中可真熱鬧渡冻,春花似錦、人聲如沸忧便。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽珠增。三九已至超歌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間切平,已是汗流浹背握础。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悴品,地道東北人禀综。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像苔严,于是被迫代替她去往敵國和親定枷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.Json簡介 Json届氢,全名 JavaScript Object Notation欠窒,是一種輕量級的數(shù)據(jù)交換格式...
    herrykb閱讀 1,116評論 0 0
  • pyton review 學(xué)習(xí)指南 https://www.zhihu.com/question/29138020...
    孫小二wuk閱讀 1,046評論 0 2
  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項目接著寫寫一名3年工作經(jīng)驗的J...
    燕京博士閱讀 7,575評論 1 118
  • 秋色 原創(chuàng)/阿蓮 才見白壁金浸綠,又遙灰墻紅染黃。 誰家小兒最無賴岖妄,一言不合就涂墻型将?
    阿蓮簡師閱讀 314評論 5 20
  • 弟弟最近幾天已經(jīng)能趴姿坐姿轉(zhuǎn)換自如啦,七個半月進步不小哦荐虐,而且已經(jīng)會爬很久了七兜。
    墨藍(lán)涼語閱讀 173評論 0 0