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]}]
"foar 3.特殊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