JSON是JavaScript Object Notation的縮寫,SJON是一種輕量級的數據交換格式。易于人閱讀和編寫。同時也易于機器解析和生成。
它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。
JSON建構于兩種結構:
“名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀錄(record),結構(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯數組 (associative array)。
值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。
這些都是常見的數據結構。事實上大部分現代計算機語言都以某種形式支持它們。這使得一種數據格式在同樣基于這些結構的編程語言之間交換成為可能。
1.對簡單數據類型的encoding和decoding:
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
print json.dumps(['foo',{'bar':('baz',None,1.0,2)}])
print json.dumps("\"foo\bar")
print json.dumps(u'\u1234')
print json.dumps('\\')
print json.dumps({"c":0,"b":0,"a":0},sort_keys=True)輸出:
["foo", {"bar": ["baz", null, 1.0, 2]}]
"\"foo\bar"
"\u1234"
"\\"
{"a": 0, "b": 0, "c": 0} compact encoding:
#json主要是作為一種數據通信的格式存在的,而網絡通信是很在乎數據的大小的,無用的空格會占據很多通信帶寬,所以適當時候也要對數據進行壓縮。separator參數可以起到這樣的作用,該參數傳遞是一個元組,包含分割對象的字符串。
print json.dumps([1,2,3,{'4':5,'6':7}],separators=(',',':'))
#indent參數是縮進的意思,它可以使得數據存儲的格式變得更加優雅。
print json.dumps([1,2,3,{'4':5,'6':7}],separators=(',',':'),indent = 4)2.decoding JSON
json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
print json.loads('["foo",{"bar":["baz",null,1.0,2]}]')
print json.loads('"\\"foo\\bar"')輸出:
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
"foar3.特殊JSON對象的解析
def as_complex(dct):
if '__complex__' in dct:
return complex(dct['real'],dct['imag'])
return dct
print json.loads('{"__complex__":true,"real":1,"imag":2}',object_hook=as_complex)輸出:
(1+2j)
參見:http://docs.python.org/2/library/json.html