關於json.dumps中的參數,例如ensure_ascii

經過help(「json」) 看到裏面有一個配置信息,json

<span style="font-family:Microsoft YaHei;font-size:18px;">    
dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
</span>  

編碼後的json格式字符串緊湊的輸出,並且也沒有順序,所以dumps方法提供了一些可選的參數,讓輸出的格式提升可讀性。 
(1)sort_keys是告訴編碼器按照字典排序(a到z)輸出。編碼

import jsonspa

data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
print 'DATA:', repr(data)對象

unsorted = json.dumps(data)
print 'JSON:', json.dumps(data)
print 'SORT:', json.dumps(data, sort_keys=True)
輸出:blog

DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]
JSON: [{"a": "A", "c": 3.0, "b": [2, 4]}]
SORT: [{"a": "A", "b": [2, 4], "c": 3.0}

(2)indent參數根據數據格式縮進顯示,讀起來更加清晰:排序

indent的數值,表明縮進的位數
import jsonip

data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
print 'DATA:', repr(data)ci

print 'NORMAL:', json.dumps(data, sort_keys=True)
print 'INDENT:', json.dumps(data, sort_keys=True, indent=2)
輸出:字符串

DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]
NORMAL: [{"a": "A", "b": [2, 4], "c": 3.0}]
INDENT: [
  {
    "a": "A",
    "b": [
      2,
      4
    ],
    "c": 3.0
  }
]
(3)separators參數的做用是去掉,,:後面的空格,從上面的輸出結果都能看到」, :」後面都有個空格,這都是爲了美化輸出結果的做用,可是在咱們傳輸數據的過程當中,越精簡越好,冗餘的東西所有去掉,所以就能夠加上.string

data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
print 'DATA:', repr(data)
print 'repr(data)             :', len(repr(data))
print 'dumps(data)            :', len(json.dumps(data))
print 'dumps(data, indent=2)  :', len(json.dumps(data, indent=2))
print 'dumps(data, separators):', len(json.dumps(data, separators=(',',':')))
print json.dumps(data, sort_keys=True)
print json.dumps(data, sort_keys=True, separators=(',',':'))

輸出結果爲:

DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]
repr(data)             : 35
dumps(data)            : 35
dumps(data, indent=2)  : 76
dumps(data, separators): 29
[{"a": "A", "b": [2, 4], "c": 3.0}]
[{"a":"A","b":[2,4],"c":3.0}]

(4)skipkeys參數,在encoding過程當中,dict對象的key只能夠是string對象,若是是其餘類型,那麼在編碼過程當中就會拋出ValueError的異常。skipkeys能夠跳過那些非string對象看成key的處理.

data2 = [ { 'a':'A', 'b':(2, 4), 'c':3.0, ('d',):'D tuple' } ]
try:
    print json.dumps(data2)
except (TypeError, ValueError) as err:
    print 'ERROR:', err
print
print json.dumps(data2, skipkeys=True)

>>輸出結果爲:
>ERROR: keys must be a string

[{"a": "A", "c": 3.0, "b": [2, 4]}]

(5)輸出真正的中文須要指定ensure_ascii=False

若是無任何配置,或者說使用默認配置, 
輸出的會是‘涼涼’的ASCII字符嗎,而不是真正的中文。 
這是由於json.dumps 序列化時對中文默認使用的ascii編碼。

import json

print json.dumps('涼涼')

>> "\u51c9\u51c9"

想輸出真正的中文須要指定ensure_ascii=False:

print json.dumps('涼涼', ensure_ascii=False) >> 涼涼 參照:  http://liuzhijun.iteye.com/blog/1859857  

相關文章
相關標籤/搜索