1. json 与 python 数据类型转换
具有read()或者write()方法的对象就是类文件对象, f = open(“a.txt”,”r”) f 就是类文件对象
- json.loads 把json字符串转化为python类型
- json.dumps能够把python类型转化为json字符串,在写入文件的时候可以定义格式。
ensure_ascii=False
解决中文不能显示的问题, indent=4
格式化写入
- json使用注意点
- json中的字符串都是双引号引起来的
- 如果不是双引号
- eval:能实现简单的字符串和python类型的转化
- replace:把单引号替换为双引号
- 往一个文件中写入多个json串,不再是一个json串,不能直接读取
2. 代码示例
import requests
# pprint 格式化输出
from pprint import pprint
import json
headers = {
"User-Agent": "Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1",
"Cookie": 'll="108288"; bid=sJsLF5EFmNU; __utma=30149280.1153899539.1547884621.1547884621.1547884621.1; __utmc=30149280; __utmz=30149280.1547884621.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); ap_v=0,6.0; _vwo_uuid_v2=D2FC899ECDFDF067F8A1D9361C62E08BF|dcde25b86f8f06e240c52f1184de892e; __utmb=30149280.3.10.1547884621; talionnav_show_app="0"; Hm_lvt_6d4a8cfea88fa457c3127e14fb5fabc2=1547885758; _ga=GA1.3.1153899539.1547884621; _gid=GA1.3.269528931.1547885758; Hm_lpvt_6d4a8cfea88fa457c3127e14fb5fabc2=1547887119',
"Referer": "https://m.douban.com/movie/"
}
response = requests.get('https://m.douban.com/rexxar/api/v2/subject_collection/movie_showing/items?&start=0&count=8&loc_id=108288', headers=headers)
data = response.content.decode()
# json.loads 把json字符串转化为python类型
dict = json.loads(data)
# pprint(dict)
# json.dumps能够把python类型转化为json字符串,在写入文件的时候可以定义格式
# ensure_ascii=False 解决中文不能显示的问题, indent=4 格式化写入
with open('douban.json', 'w', encoding='utf-8') as f:
f.write(json.dumps(dict, ensure_ascii=False, indent=4))
with open('douban.json', 'r', encoding='utf-8') as f:
file_data = f.read()
json_data = json.loads(file_data)
# pprint(json_data)
# 使用json.load提取类文件对象中的数据
with open('douban.json', 'r', encoding='utf-8') as f:
load_data = json.load(f)
print(load_data)
print(type(load_data)) # <class 'dict'>
# json.dump能够把python类型放入类文件对象中
with open('douban1.json', 'w', encoding='utf-8') as f:
json.dump(dict, f, ensure_ascii=False, indent=4)
复制代码