python操作json(一)
- 2020 年 1 月 6 日
- 筆記
Python 操作json Json語法規則: 數據在名稱/值對中 數據由逗號分隔 花括弧保存對象 方括弧保存數組 Json字元串本質上是一個字元串,用單引號表示
Json數據的書寫格式 名稱–值對,包括名稱欄位(在雙引號中),後面跟一個冒號,然後是值: 「name」: 」zhangsan」 等價於name = 「zhangsan」 Json值 值可以是 數字(整數或浮點數) 字元串(雙引號括起來) 邏輯值(true或false) 數組(在方括弧中) 對象(在花括弧中) null Json對象 Json的對象是在大括弧中的, {「name」:」zhangsan」,」age」:20} 等價 name=」zhangsan」 age = 20
Json數組 Json數組是在中括弧中的,數組可以包含多個對象 { "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] } Employees是包含三個對象的數組
編碼Json.dumps() 將一個python對象編碼成json字元串,
Python的列錶轉換成json數組
json.dumps([1,2,3,"a"]) '[1, 2, 3, "a"]'
Python的字元串轉換成json字元串
json.dumps("abc123") '"abc123"'
Python元組轉換成json數組
json.dumps((1,2,3,"a","b")) '[1, 2, 3, "a", "b"]'
Python的字典轉換成json的對象
json.dumps({1:"a",2:"b",3:"c"}) '{"1": "a", "2": "b", "3": "c"}'#注意1、2、3被加上了雙引號,因為json的名稱是必須要加雙引號的
Python的數字(long型)轉換成json的數字
json.dumps(13L) '13'
Python的數字(int)轉換成json的數字
json.dumps(13) '13'
Python的unicode字元串轉換成json的字元串
json.dumps(u"abC") '"abC"'
Python的True轉換成json的true
json.dumps(True) 'true'
Python的False轉換成json的false
json.dumps(False) 'false'
Python的None轉換成json的null
json.dumps(None) 'null' type(json.dumps("abc"))#json本質上是一個字元串 <type 'str'>
怎麼判斷一個json 是不是合法的? 用try except try: json.loads('"abc"') except Exception,e: print e else: print "ok"
json.dumps()函數參數應用 sort_keys 是否按key排序,sort_keys = True升序排序
#coding=utf-8 import json data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 }] print json.dumps(data) print json.dumps(data, sort_keys=True)
indent 設置參數縮進顯示的空格數。縮進顯示使讀起來更加清晰。 #coding=utf-8 import json data = [{"a": "A", "b": [2, 4], "c": 3.0}] print json.dumps(data, sort_keys=True, indent=3)
Separators 參數的作用是去掉逗號「,」和分號「:」後面的空格,從上面的輸出果都能看到「,」與「:」後面都有個空格,這都是為了美化輸出結果的作用,但是在我們傳輸數據的過程中,越精簡越好,冗餘的東西全部去掉,因此就可以加上separators參數對傳輸的json串進行壓縮。該參數是元組格式的 import json data = [{"a": "A", "b": [2, 4], "c": 3.0}] print len(json.dumps(data)) 去掉編碼後的json串中,和:後面的空格 print len(json.dumps(data, separators=(',',':')))
skipkeys 在encoding過程中,dict對象的key只可以是基本數據類型(str,unicode,int,long,float,bool,None),如果是其他類型,那麼在編碼過程中就會拋出TypeError的異常。skipkeys可以跳過那些非string對象的key的處理,就是不處理 import json data= [ { 'a':'A', 'b':(2, 4), 'c':3.0, (1,2):'D tuple' } ] print u"不設置skipkeys 參數" try : res1 = json.dumps(data) #skipkeys參數默認為False時 except Exception, e: print e
print u"設置skipkeys 參數" print json.dumps(data, skipkeys=True)