【发布时间】:2018-04-27 21:01:52
【问题描述】:
以下代码出错。但是,有时它有效,有时则无效。我已经用 JSONLint 验证了数据。我尝试根据对类似错误问题的响应对数据进行解码/编码,并使用编解码器模块进行了相同的尝试。我不明白为什么它有时工作正常,然后有时会抛出错误。
import requests
import json
import codecs
response = requests.get("https://api.weather.gov/alerts/active")
print(response.status_code)
with open ('data.json', 'w') as file:
file.write(response.content)
myFile = open('data.json', 'r')
myObject = myFile.read()
u = myObject.decode('utf-8-sig')
myObject = u.encode('utf-8')
myFile.encoding
myFile.close()
myData = json.loads(myObject, 'utf-8')
#myData=json.loads(codecs.open(myObject,'r', 'utf-8'))
可以在我提出的另一个问题 here 中找到 JSON 数据的示例。
【问题讨论】:
-
您尝试加载的 JSON 对象可能存在一些差异。我遇到的一个常见错误是存在一个在一种语言(如 java)中有效的值,而不是在 python 中有效的值。这方面的一个例子是
{"Key": null}这在java 中是有效的JSON,但在python 中不是,因为null不是python 定义的。我建议在 try/except ValueError 语句中包含 json.loads 语句。然后在 except 块中,打印/写出您传递的字符串,并尝试确定未正确解析的内容。 -
@Matt No.
json.loads('{"Key": null}')将在 Python 中返回{'Key': None}。所有有效的 JSON 都适用于所有语言的所有符合标准的 JSON 解析器。 -
@abarnert,是的,你是对的,看来我在考虑 ast.literal_eval()
-
@Matt 是的,这只是在 JSON 上不使用
literal_eval而不是json.loads的众多原因之一。
标签: python json python-requests python-2.6