您的位置:首页 > 编程语言 > Python开发

python之json模块

2016-07-30 11:15 369 查看
## 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: