1. 程式人生 > >python中的json模組介紹

python中的json模組介紹

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,其最廣泛的應用是作為AJAX中web伺服器和客戶端的通訊的資料格式。json類似於xml,但比 XML 更小、更快,更易解析。

簡單來講,json的格式與python種的字典和列表及其二者的組合類似。如下面的一個json格式的資料(引自百度百科):

{
    "programmers": [{
        "firstName": "Brett",
        "lastName": "McLaughlin",
        "email": "aaaa"
    }, {
        "firstName": "Jason",
        "lastName": "Hunter",
        "email": "bbbb"
    }, {
        "firstName": "Elliotte",
        "lastName": "Harold",
        "email": "cccc"
    }],
    "authors": [{
        "firstName": "Isaac",
        "lastName": "Asimov",
        "genre": "sciencefiction"
    }, {
        "firstName": "Tad",
        "lastName": "Williams",
        "genre": "fantasy"
    }, {
        "firstName": "Frank",
        "lastName": "Peretti",
        "genre": "christianfiction"
    }]
}

Python2.6 以上版本的標準庫json支援Json的編碼和解碼,支援python的大部分內建型別與Json進行轉換。

編碼是把python物件轉換成json物件,通過josn.dump()、josn.dumps()實現。兩個函式的唯一區別就是dump把python物件轉換成json物件生成一個fp的檔案流,而dumps則是生成了一個字串。

以dumps為例:

json.dumps(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

其中常用的引數及其含義如下:Skipkeys:預設值是False,如果dict的keys內的資料不是python的基本型別(str,unicode,int,long,float,bool,None),設定為False時,就會報TypeError的錯誤。此時設定成True,則會跳過這類key
ensure_ascii:預設值True,如果dict內含有non-ASCII的字元,則會類似\uXXXX的顯示資料,設定成False後,就能正常顯示
indent:應該是一個非負的整型,如果是0,或者為空,則一行顯示資料,否則會換行且按照indent的數量顯示前面的空白,這樣打印出來的json資料也叫pretty-printed json
separators:分隔符,實際上是(item_separator, dict_separator)的一個元組,預設的就是(',',':');這表示dictionary內keys之間用“,”隔開,而KEY和value之間用“:”隔開。
encoding:預設是UTF-8,設定json資料的編碼方式。
sort_keys:將資料根據keys的值進行排序。

解碼是把json物件轉換成python物件的一個過程,常用的兩個函式是loads和load函式。區別跟dump和dumps是一樣的。