一、什么是JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。现在很多服务器返回的结果都是JSON格式,主要是由于它比较容易解析和生成,JSON格式的数据本质上是一种被格式化了的字符串。
二、Python处理JSON数据
用Python处理JSON数据很简单,Python自带有JSON模块,可以对Python对象与JSON字符串进行相互转换。
2.1 编码
json.dumps()
把一个Python对象编码成JSON字符串。举个例子:
import json
pythonObj = [[1, 2, 3], 123, 123.321, 'abc',
{'Name':'LaoWang', 'Age':23},
True, False, None]
jsonStr = json.dumps(pythonObj) # 将Python类型转换成JSON类型
print('the JSON string is:\n {0}'.format(jsonStr))
# 或者直接使用with open 来保存文件
with open('loss.json', 'w') as f:
json.dump({'listData': pythonObj}, f)
the JSON string is:
[[1, 2, 3], 123, 123.321, “abc”, {“Name”: “LaoWang”, “Age”: 23}, true, false, null]
通过输出的结果可以看出,简单类型的Python对象通过encode(编码)之后跟其原始的repr()
结果非常相似,但是有些数据类型进行了改变,会从Python原始类型向JSON类型的转换过程。
2.2 解码
json.loads()
把JSON格式字符串解码,转换成Python对象。
import json
pythonObj = [[1, 2, 3], 123, 123.321, 'abc',
{'Name':'LaoWang', 'Age':23},
True, False, None]
jsonStr = json.dumps(pythonObj)
print('the JSON string is:\n {0}'.format(jsonStr))
pythonObj = json.loads(jsonStr)
print('the PythonObj is:\n{0}'.format(pythonObj))
# 或直接with open 读取文件
with open('loss.json', 'r') as f:
pythonObj = json.load(f)
pythonObj = pythonObj['listData']
the JSON string is:
[[1, 2, 3], 123, 123.321, “abc”, {“Name”: “LaoWang”, “Age”: 23}, true, false, null]
the PythonObj is:
[[1, 2, 3], 123, 123.321, ‘abc’, {‘Name’: ‘LaoWang’, ‘Age’: 23}, True, False, None]
类似于上面的编码会产生类型转换,下面的解码也会产生类型转换。
三、数据转换
3.1 从Python向JSON转换
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
3.2 从JSON向Python转换
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number (int) | int, long |
number (real) | float |
true | True |
false | False |
null | None |
四、使用第三方库:Demjson
Demjson 是 python 的第三方模块库,可用于编码和解码 JSON 数据,包含了 JSONLint 的格式化及校验功能。
Github 地址:https://github.com/dmeranda/demjson
官方地址:http://deron.meranda.us/python/demjson/
4.1 函数
函数 | 描述 |
---|---|
encode | 将 Python 对象编码成 JSON 字符串 |
decode | 将已编码的 JSON 字符串解码为 Python 对象 |
4.2 实例
4.2.1 encode
import demjson
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
json = demjson.encode(data)
print json
[{“a”:1,”b”:2,”c”:3,”d”:4,”e”:5}]
4.2.2 decode
import demjson
json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = demjson.decode(json)
print text
{u’a’: 1, u’c’: 3, u’b’: 2, u’e’: 5, u’d’: 4}