日期:2014-05-16  浏览次数:20321 次

python2.5 json使用
[zz] python 中json 操作
2010-08-16 11:29
json 格式的例子:
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
{ "type": "home", "number": "212 555-1234" },
{ "type": "fax", "number": "646 555-4567" }
],
"newSubscription": false,
"companyName": null
}
本质上就是一串格式化的字符串。

python 2.5 没有内置的 json 处理模块,可以下载 python-json (json-py) 模块(下载地址: http://pypi.python.org/pypi/python-json)。解压zip包 然后把 json.py 和 minjson.py 考到 /usr/lib/python2.5/下面就行了。
python 2.6 内置了一个 json 的处理模块(官方使用文档: http://docs.python.org/library/json.html)。


关于几个流行 json 处理模块的效率比较:
http://blog.csdn.net/toontong/archive/2009/12/10/4979572.aspx

语法:
这里以 python 2.5 为例:


>>> import json
读取:

>>> data = json.read('{"firstname": "Zhongwei", "lastname": "Sun"}') # 前面已经提到了,json 就是一个格式化字符串,所以大括号两侧要加上引号。
>>> data['firstname']
'Zhongwei'
>>> data['lastname']
'Sun'

写:(感觉这个用处不是很大)

>>> test = json.write(data)
>>> test
'{"lastname":"Sun","firstname":"Zhongwei"}'
>>>

python 2.6 为例:

## object-->jsonstr

Compact encoding:

>>> import json
>>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
'[1,2,3,{"4":5,"6":7}]'
## jsonstr-->object

Decoding JSON:

>>> import json
>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
###

>>> data=json.loads('{"firstname": "Zhongwei", "lastname": "Sun"}')
>>> print data
{u'lastname': u'Sun', u'firstname': u'Zhongwei'}
>>> {u'lastname': u'Sun', u'firstname': u'Zhongwei'}
{u'lastname': u'Sun', u'firstname': u'Zhongwei'}
>>> print data['firstname']
Zhongwei
>>> import json
>>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
>>> print json.dumps("\"foo\bar")
"\"foo\bar"
>>> print json.dumps(u'\u1234')
"\u1234"
>>> print json.dumps('\\')
"\\"
>>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
{"a": 0, "b": 0, "c": 0}
>>> from StringIO import StringIO
>>> io = StringIO()
>>> json.dump(['streaming API'], io)
>>> io.getvalue()
'["streaming API"]'

JSON 的基本介绍:
引用自:http://www.ruanyifeng.com/blog/2009/05/data_types_and_json.html

21世纪初,Douglas Crockford寻找一种简便的数据交换格式,能够在服务器之间交换数据。这其实需要二步,第一步是将各种数据转化为一个字符串,也就是数据的串行化(serialization),第二步才是交换这个字符串。

当时通用的数据交换语言是XML,但是Douglas Crockford觉得XML的生成和解析都太麻烦,所以他提出了一种简化格式,也就是Json。

Json的规格非常简单,只用一个页面、几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。

1) 并列的数据之间用逗号(“,”)分隔。

2) 映射用冒号(“:”)表示。

3) 并列数据的集合(数组)用方括号("[]")表示。

4) 映射的集合(对象)用大括号(“{}”)表示。

上面四条规则,就是Json格式的所有内容。

比如,下面这句话:

“北京市的面积为16800平方公里,常住人口1600万人。上海市的面积为6400平方公里,常住人口1800万。”

写成json格式就是这样:

[
{"城市":"北京","面积":16800,"人口":1600},
{"城市":"上海","面积":6400,"人口":1800}
]

如果事先知道数据的结构,上面的写法还可以进一步简化:

[
["北京",16800,1600],
["上海",6400,1800]
]

由此可以看到,json非常易学易用。所以,在短短几年中,它就取代xml,成为了互联网上最受欢迎的数据交换格式。

我猜想,Douglas Crockford一定事先就知道,数据结构可以简化成三种形式,否则怎么可能将json定义得如此精炼呢!

#####

最近发现json解释时,不同人,用同个json库写的代码不一样(所调方法函数不一致,不同用法会出现代码不兼容)。
特地去查了下资料,做了个比较。结果如下:
------------------------------------------------
python中的json解释库有好几个,其中不同版本有使用上的差异。
常用有 json-py 与smiplejson 两个包
其中json-py 包含一个minjson,用法一样,只是