一、什么是JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。现在很多服务器返回的结果都是JSON格式,主要是由于它比较容易解析和生成,JSON格式的数据本质上是一种被格式化了的字符串。

二、Python处理JSON数据

用Python处理JSON数据很简单,Python自带有JSON模块,可以对Python对象与JSON字符串进行相互转换。

2.1 编码

json.dumps()把一个Python对象编码成JSON字符串。举个例子:

  1. import json
  2. pythonObj = [[1, 2, 3], 123, 123.321, 'abc',
  3. {'Name':'LaoWang', 'Age':23},
  4. True, False, None]
  5. jsonStr = json.dumps(pythonObj) # 将Python类型转换成JSON类型
  6. print('the JSON string is:\n {0}'.format(jsonStr))
  7. # 或者直接使用with open 来保存文件
  8. with open('loss.json', 'w') as f:
  9. 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对象。

  1. import json
  2. pythonObj = [[1, 2, 3], 123, 123.321, 'abc',
  3. {'Name':'LaoWang', 'Age':23},
  4. True, False, None]
  5. jsonStr = json.dumps(pythonObj)
  6. print('the JSON string is:\n {0}'.format(jsonStr))
  7. pythonObj = json.loads(jsonStr)
  8. print('the PythonObj is:\n{0}'.format(pythonObj))
  9. # 或直接with open 读取文件
  10. with open('loss.json', 'r') as f:
  11. pythonObj = json.load(f)
  12. 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

  1. import demjson
  2. data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
  3. json = demjson.encode(data)
  4. print json

[{“a”:1,”b”:2,”c”:3,”d”:4,”e”:5}]

4.2.2 decode

  1. import demjson
  2. json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
  3. text = demjson.decode(json)
  4. print text

{u’a’: 1, u’c’: 3, u’b’: 2, u’e’: 5, u’d’: 4}