学科分类
目录
网络爬虫

json模块基本使用

json模块提供了四个方法:dumps、dump、loads、load,用于字符串和Python数据类型间进行转换。其中loads和load方法用于Python对象的反序列化,dumps和dump方法用于Python对象的序列化,接下来对这些方法依次进行介绍。

1. json.loads()

把JSON格式字符串解码转换成Python对象。从JSON类型向Python原始类型转化的对照如表1所示。

表1 JSON向Python转化的类型对照

JSON Python
object dict
array list
string unicode
number(int) int,long
number(real) float
true True
false False
null None

以下示例演示了loads方法的使用:

>>> import json
>>> str_list = '[1, 2, 3, 4]'
>>> str_dict = '{"city": "北京", "name": "小明"}'
>>> json.loads(str_list)
[1, 2, 3, 4]
>>> json.loads(str_dict)
{'city': '北京', 'name': '小明'}

2. json.dumps()

实现将Python类型编码为JSON字符串,返回一个str对象。从Python原始类型向JSON类型转化的对照如表2所示。

表2 Python向JSON转化的类型对照

Python JSON
dict object
list,tuple array
str, unicode string
int,long,float number
True true
False false
None null

以下示例演示了dumps方法的使用:

# json_dumps.py
import json
demo_list = [1, 2, 3, 4]
demo_tuple = (1, 2, 3, 4)
demo_dict = {"city": "北京", "name": "小明"}
json.dumps(demo_list)
# [1, 2, 3, 4]
json.dumps(demo_tuple)
# [1, 2, 3, 4]
# 注意:json.dumps() 处理中文时默认使用的ascii编码,会导致中文无法正常显示
print(json.dumps(demo_dict)) 
# {"city": "\u5317\u4eac", "name": "\u5c0f\u660e"}
# 记住:处理中文时,添加参数 ensure_ascii=False 来禁用ascii编码
print(json.dumps(demo_dict, ensure_ascii=False)) 
# {"city": "北京", "name": "小明"}

3.json.load()

读取文件中JSON形式的字符串元素,转化成Python类型。它与json.loads()方法的区别在于,一个读取的是字符串,一个读取的是文件。

以下的示例读取一个名为listStr.json和dictStr.json的文件内容,代码如下:

# json_load.py
import json
str_list = json.load(open("listStr.json"))
print(str_list)
# [{u'city': u'\u5317\u4eac'}, {u'name': u'\u5c0f\u660e'}]
str_dict = json.load(open("dictStr.json"))
print(str_dict)
# {u'city': u'\u5317\u4eac', u'name': u'\u5c0f\u660e'}

4.json.dump()

将Python内置类型序列化为json对象后写入文件。它与json.dumps()方法的区别在于写入的是文件还是字符串。

以下示例演示了dump方法的使用:

# json_dump.py
import json
str_list = [{"city": "北京"}, {"name": "小明"}]
json.dump(str_list, open("listStr.json", "w"), ensure_ascii=False)
str_dict = {"city": "北京", "name": "小明"}
json.dump(str_dict, open("dictStr.json","w"), ensure_ascii=False)
点击此处
隐藏目录