我正在尝试编写一个脚本来从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']
感谢您的投入!
答案 0 :(得分:1)
为什么要json.loads()
两次?变化:
json.loads(json.loads(json_data))
为:
json.loads(json_data)
它应该有用。
现在,由于您在执行TypeError: string indices must be integers
时收到错误pythonVal['data']
,这意味着pythonVal
的值属于list
类型,而不是dict
。而是做:
for item in pythonVal:
print item
如果您想获得其他人更好的帮助,请同时提及问题的示例JSON内容:)
答案 1 :(得分:0)
将以下内容放在代码之上。这可以通过将Python的原生ascii编码覆盖为UTF-8来实现。
# -*- coding: utf-8 -*-
第二个错误是因为你已经获得了字符串,并且需要整数索引来获取字符串的字符。