【问题标题】:JSON python error: Expecting value: line 1 column 1 (char 0)JSON python错误:期望值:第1行第1列(char 0)
【发布时间】:2017-07-12 19:45:27
【问题描述】:

在运行脚本时有时会出现错误:

Traceback (most recent call last):
  File "C:\Users\dzwon\Desktop\osu_pp_watch_v15_FINAL.py", line 27, in <module>
    data=(requests.get('https://osu.ppy.sh/api/get_user?k=' + APIkey + '&u=' + username)).json()
  File "C:\Users\dzwon\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\models.py", line 894, in json
    return complexjson.loads(self.text, **kwargs)
  File "C:\Users\dzwon\AppData\Local\Programs\Python\Python36\lib\json\__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "C:\Users\dzwon\AppData\Local\Programs\Python\Python36\lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\dzwon\AppData\Local\Programs\Python\Python36\lib\json\decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

错误可能会在 15 或 2 分钟后弹出,或者根本不会弹出

解析 JSON 的脚本部分

 data=(requests.get('https://osu.ppy.sh/api/get_user?k=' + APIkey + '&u=' + username)).json()
 pp = data[0]['pp_raw']
 rank = data[0]['pp_rank']

和 JSON 数据

[{"user_id":"5390233","username":"dzwon21","count300":"439843","count100":"39207","count50":"5245","playcount":"3860","ranked_score":"753280488","total_score":"1708595594","pp_rank":"223986","level":"63.7695","pp_raw":"842.426","accuracy":"97.04467010498047","count_rank_ss":"53","count_rank_s":"235","count_rank_a":"264","country":"PL","pp_country_rank":"10947","events":[{"display_html":"<b><a href='\/u\/5390233'>dzwon21<\/a><\/b> unlocked the \"<b>Insanity Approaches<\/b>\" medal!","beatmap_id":"0","beatmapset_id":"0","date":"2017-07-12 17:43:17","epicfactor":"4"}]}]

【问题讨论】:

  • 您的请求可能不时返回有效 JSON 以外的其他内容。在尝试解码之前或发生错误时尝试记录您从服务器收到的内容。
  • 如果出现问题,我会尝试发布

标签: python json


【解决方案1】:

您的 HTTP 请求失败。在获取 JSON 数据之前,您应该检查 HTTP 请求的成功或失败:

 #UNTESTED
 result=requests.get('https://osu.ppy.sh/api/get_user?k=' + APIkey + '&u=' + username)
 if result.ok and  result.headers['content-type'] ==  'application/json':
     data = result.json()
 else:
     raise SomeError("HTTP did not return data.")

 pp = data[0]['pp_raw']
 rank = data[0]['pp_rank']

【讨论】:

  • 所以,我编辑了一点代码并将其放入,代码没有检测到 http 请求失败。新错误pastebin.com/nC2US6yF
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 2019-07-04
  • 2020-04-18
  • 2021-09-30
  • 2021-03-25
  • 2019-08-21
  • 1970-01-01
相关资源
最近更新 更多