标签:
## 0x00简介:
如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON、XML等。反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态,重新创建该对象。
## 0x01常用函数:
### json.dumps方法对简单数据类型encoding
encoding:把一个Python对象编码转换成Json字符串
decoding:把Json格式字符串解码转换成Python对象
import json
data = [{‘a‘:"A",‘b‘:(2,4),‘c‘:3.0}] #list对象
print "DATA:",repr(data)
data_string = json.dumps(data)
print "JSON:",data_string
输出:
DATA: [{‘a‘:‘A‘,‘c‘:3.0,‘b‘:(2,4)}]
JSON: [{"a":"A","c":3.0,"b":[2,4]}]
### json.loads方法处理简单数据类型的decoding(解码)转换
使用loads方法即可将json字符串转换成python对象。
import json
data = [{‘a‘:"A",‘b‘:(2,4),‘c‘:3.0}] #list对象
data_string = json.dumps(data)
print "ENCODED:",data_string
decoded = json.loads(data_string)
print "DECODED:",decoded
print "ORIGINAL:",type(data[0][‘b‘])
print "DECODED:",type(decoded[0][‘b‘])
输出:
ENCODED: [{"a": "A", "c": 3.0, "b": [2, 4]}]
DECODED: [{u‘a‘: u‘A‘, u‘c‘: 3.0, u‘b‘: [2, 4]}]
ORIGINAL: <type ‘tuple‘>
### sort_keys是告诉编码器按照字典排序(a到z)输出,
import json
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)
输出:
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}
indent参数根据数据格式缩进显示,读起来更加清晰:
print ‘INDENT:‘, json.dumps(data, sort_keys=True, indent=2)
## json格式字符串写入到文件流中
import json
import tempfile
f = tempfile.NamedTemporaryFile(mode=‘w+‘)
f.write(‘[{"a": "A", "c": 3.0, "b": [2, 4]}]‘)
f.flush()
f.seek(0)
print json.load(f)
输出:
[{u‘a‘: u‘A‘, u‘c‘: 3.0, u‘b‘: [2, 4]}]
## 0x03基本案例:
案例1,
import json
js=json.loads(‘{"json":"你是我的,你好"}‘)
print json.dumps(js)
print json.dumps(js,ensure_ascii=False)
案例2,
import json
js=json.loads(‘{"json":"你是我的,你好"}‘)
print json.dumps(js,encoding="GB2312")
print json.dumps(js,encoding="utf-8")
案例3,
import json
s = ‘[{"name":"鸟巢","point":{"lat":"39.990","lng":"116.397"},"desc":"奥运会主场地"},{"name":"北大乒乓球馆","point":{"lat":"39.988","lng":"116.315"},"desc":"乒乓球比赛场地"},{"name":"北京工人体育场","point": {"lat":"39.930","lng":"116.446"},"desc":"足球比赛场地"}]‘
print type(s)
locations = json.loads(s)
print type(locations)
#注:read是json-py.py和minijson.py的方法,而python2.6开始自带的lib库里用的是simplejson.py,其没有read方法,而是load/loads
print str(len(locations)) #因为json.load()之后的对象就是dict类型的!
for location in locations:
print location["name"]
print location["point"]["lat"]
案例4,
import json
json_string=‘{"first_name":"Guido","last_name":"Russum"}‘
print json_string
print type(json_string)
parsed_json=json.loads(json_string)
print parsed_json
print type(parsed_json)
print parsed_json[‘last_name‘]
print json.dumps(json_string)
print json.loads(json_string)
标签:
原文地址:http://www.cnblogs.com/lazy0/p/5720523.html