报错信息:JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 127027 (char 127026)
个人觉得是json解析部分出现问题
import requests
import json
import pandas as pd
import datetime
from pyecharts.charts import Map
from pyecharts import options as opts
# 腾讯数据接口获取json格式疫情数据
def get_ncp_data():
reponse = requests.get('https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5').json()
data = json.loads(reponse['data'])
return data
# 扁平化中国疫情数据
def flatten_ncp_data():
all = json.loads(get_ncp_data())
# 初始化结果链表
provinces = []
date = all['lastUpdateTime']
# 获取各省份确诊病例
china = all['areaTree'][0]['children'] # 获得中国数据
for province in china:
province_ncp = province['children']
province_ncp = {
'日期': date,
'省份': province['name'],
'累计确认': province['total']['confirm'],
'现存病例':province['total']['nowConfirm']
}
provinces.append(province_ncp)
return provinces
# 渲染可视化地图
def render_map_chart():
provinces = flatten_ncp_data()
df = pd.DataFrame(provinces)
c = (
Map()
.add("累计确诊病例",[list(z) for z in zip(list(df["省份"]), list(df['累计确认']))],
"china",is_map_symbol_show=False)
.set_global_opts(title_opts=opts.TitleOpts(title="中国疫情地图"),
visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
pieces=[
{"max": 0, "min": 0, "label": "0","color":"#e2ebf4"},
{"max": 9, "min": 0, "label": "0-9","color":"#ffe7b2"},
{"max": 99, "min": 10, "label": "10-99","color":"#ffcea0"},
{"max": 999, "min": 100, "label": "100-999","color":"#ffa577"},
{"max": 4999, "min": 1000, "label": "1000-4999","color":"#CD5C5C"},
{"max": 9999, "min": 5000, "label": "5000-9999","color":"#ff2736"},
{"max": 99999, "min": 10000, "label": "10000-99999","color":"#A52A2A"}
]))
)
return c
map_chart=render_map_chart()
map_chart.render_notebook()
接口已经发生变化了,你这个是旧接口。
据说这是单双引号导致的问题,有以下两种解决方案:
解法一:
把单引号变成双引号即可
import json
tt = '{"start_row": 0, "end_row": 0, "env": 0, "now": 0}'
t = json.loads(tt)
print(t)
解法二
import ast
tt = "{'start_row': 0, 'end_row': 0, 'env': 0, 'now': 0}"
tt = ast.literal_eval(tt)
print(tt, type(tt))
试试修改下面代码,你要先去除转义符。
reponse = requests.get('https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5').json()
str=json.loads(reponse['data'])
str=eval("'{}'".format(str))
data = json.loads(str)
这个html返回数据格式不标准, json在线转化看一下
原因是因为你获取到的 JSON 数据是不完整的,打开网址拉倒最后可以看到
有用望采纳
哪个网站的数据 帮你看看 是这个接口没有把数据返完整
和你一样,老哥用啥解决的啊