我正在尝试编写一个脚本来从 API 下载图像,我设置了一个循环,如下所示:
response = requests.get(url, params=query)
json_data = json.dumps(response.text)
pythonVal = json.loads(json.loads(json_data))
print(pythonVal)
print(pythonVal) 返回:
{
"metadata": {
"code": 200,
"message": "OK",
"version": "v2.0"
},
"data": {
"_links": {
"self": {
"href": "redactedLink"
}
},
"id": "123456789",
"_fixed": true
,
"type": "IMAGE",
"source": "social media",
"source_id": "1234567890_1234567890",
"original_source": "link",
"caption": "caption",
"video_url": null,
"share_url": "link",
"date_submitted": "2016-07-11T09:34:35+00:00",
"date_published": "2016-09-11T16:30:26+00:00",
我不断收到错误消息:
UnicodeEncodeError: 'ascii' codec can't encode character '\xc4' in
position 527: ordinal not in range(128)
对于 pythonVal 变量,如果我将其设置为 json.loads(json_data)
,它会打印出 JSON 响应,但是当我尝试执行 pythonVal['data' 时]
我收到另一个错误:
TypeError: string indices must be integers
最终我希望能够通过执行类似的操作来从中获取数据
pythonVal['data']['_embedded']['uploader']['username']
感谢您的投入!
最佳答案
为什么要执行两次json.loads()
?变化:
json.loads(json.loads(json_data))
至:
json.loads(json_data)
它应该可以工作。
现在,由于您在执行 pythonVal['data']
时收到错误 TypeError: stringindexs Must be integers
,这意味着 pythonVal< 的值
是 list
类型,而不是 dict
类型。相反,请执行以下操作:
for item in pythonVal:
print item
如果您需要其他人更好的帮助,请同时提及问题中的示例 JSON 内容:)
关于python - 从 API 访问 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39904546/