Python 3 中的 JSONdecoder 错误。来自 API 的 Json
Posted
技术标签:
【中文标题】Python 3 中的 JSONdecoder 错误。来自 API 的 Json【英文标题】:JSONdecoder Error in Python 3. Json from API 【发布时间】:2019-11-15 13:06:05 【问题描述】:我有一个代码:
dguid='2016A0011M4B'
income='7'
ethnic='3'
language='10'
url = 'https://www12.statcan.gc.ca/rest/census-recensement/CPR2016.json?lang=E&dguid=&topic=¬es=1'.format(
dguid,
ethnic)
!wget -q -O 'data.json' url
with open('data.json') as json_data:
data = json.load(json_data)
它给了我一个错误 enter image description here
----------------------------------- ---------------------------- JSONDecodeError Traceback(最近调用 最后)在() 9 get_ipython().system("wget -q -O 'data.json' url") 10 使用 open('data.json') 作为 json_data: ---> 11 数据 = json.load(json_data)
/opt/conda/envs/DSX-Python35/lib/python3.5/json/init.py 负载(fp,cls,object_hook,parse_float,parse_int,parse_constant, object_pairs_hook, **kw) 第266章 第267章 --> 268 parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) 269 270
/opt/conda/envs/DSX-Python35/lib/python3.5/json/init.py 加载(s,编码,cls,object_hook,parse_float,parse_int, parse_constant, object_pairs_hook, **kw) 317 parse_int 为 None 且 parse_float 为 None 且 318 parse_constant 是 None 并且 object_pairs_hook 是 None 而不是 kw): --> 319 返回 _default_decoder.decode(s) 如果 cls 为无,则为 320: 321 cls = JSON解码器
/opt/conda/envs/DSX-Python35/lib/python3.5/json/decoder.py 解码(自我,s,_w) 337 第338章 --> 339 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 340结束=_w(s,结束).end() 第341章
/opt/conda/envs/DSX-Python35/lib/python3.5/json/decoder.py raw_decode(self, s, idx) 第355章 356 除了 StopIteration 作为错误: --> 357 从无引发 JSONDecodeError("Expecting value", s, err.value) 358 返回对象,结束
JSONDecodeError:预期值:第 1 行第 1 列(字符 0)
怎么了?
【问题讨论】:
如果我使用加载而不是加载方法,它会给我错误:JSON 对象必须是 str,而不是 'TextIOWrapper'!wget -q -O 'data.json' url
看起来不像是有效的 Python 代码...
有一些数据科学笔记本交互界面,例如 Jupyter/Ipython,支持运行类似的 shell 命令(例如在 python 代码中间)。像这样:twitter.com/python_tip/status/929984742421942272/photo/1
【参考方案1】:
该 URL 返回的 JSON 无效。异常清楚地表明了这一点。
JSON 负载有一个前缀“//”,这会使 JSON 无效:
//"COLUMNS":["PROV_TERR_ID","PROV_TERR_NAME_NOM",...
您必须去掉前 2 个字符。你可以这样做:
with open('data.json') as json_data:
line = json_data.readlines()
line[0] = line[0][2:]
data = json.loads(line[0])
print(data)
在 python 3.6.1 中测试正确
【讨论】:
以上是关于Python 3 中的 JSONdecoder 错误。来自 API 的 Json的主要内容,如果未能解决你的问题,请参考以下文章
python字典转化成json格式。JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换
用于 API 的 JSONDecoder 和文本视图结构中的数据的问题
使用 Swift 4 中的 JSONDecoder,缺少的键可以使用默认值而不是可选属性吗?
使用 Swift 4 中的 JSONDecoder,缺少的键可以使用默认值而不是可选属性吗?