我无法从 python 中的 JSON API 响应中获取值
Posted
技术标签:
【中文标题】我无法从 python 中的 JSON API 响应中获取值【英文标题】:I can't get a value from a JSON API response in python 【发布时间】:2022-01-11 23:04:19 【问题描述】:所以我正在努力从 JSON 响应中获取值。在其他帖子中,我设法编写了这段代码,但是当我尝试在字典中搜索我想要的键 (character_id) 时,python 说该键不存在。我的解决方案包括从响应中获取 JSON 对象,使用 json.dumps() 将其转换为字符串,然后使用 json.loads() 将其转换为字典。然后我尝试从字典中获取'character_id',但它不存在。我猜它与字典的格式有关,但我在 python 方面几乎没有经验。进行查询并尝试获取值的代码是这样的:(dataRequest 是一个发出请求并从 api 返回响应的函数)
characterName = sys.argv[1];
response = dataRequest('http://census.daybreakgames.com/s:888/get/ps2:v2/character/?name.first_lower=' + characterName + '&c:show=character_id')
jsonString = json.dumps(response.json())
print(jsonString)
dic = json.loads(jsonString)
print(dic)
if 'character_id' in dic:
print(dic['character_id'])
代码的输出是:
"character_list": ["character_id": "5428662532301799649"], "returned": 1
'character_list': ['character_id': '5428662532301799649'], 'returned': 1
【问题讨论】:
【参考方案1】:欢迎@Prieto!据我所知,您可能不需要对 JSON 进行序列化/反序列化——response.json()
已经返回了一个 python 字典对象。
问题是您正在查找字典顶层的 'character_id'
键,而它似乎嵌入在 another 字典中,即在列表中。试试这样的:
#...omitted code
for char_obj in dic["character_list"]:
if "character_id" in char_obj:
print(char_obj["character_id"])
【讨论】:
【参考方案2】:如果你的 dic 像 "character_list": ["character_id": "5428662532301799649"], "returned": 1
你得到character_id的值
print(dic['character_list'][0][character_id])
【讨论】:
【参考方案3】:这里的问题是你试图访问一个字典,其中的键实际上是character_list
。
您需要做的是访问character_list
值并迭代或过滤您想要的character_id
。
像这样:
print(jsonString)
dic = json.loads(jsonString)
print(dic)
character_information = dic['character_list'][0] # we access the character list and assume it is the first value
print(character_information["character_id"]) # this is your character id
【讨论】:
【参考方案4】:在我看来,代码的唯一问题是:
if 'character_id' in dic:
print(dic['character_id'])
问题在于,JSON 文件实际上包含两个字典,第一个是主字典,它有两个键,character_list 和 returned。数组内还有第二个子字典,它是键 character_list 的值。 所以,你的代码实际上应该是这样的:
for i in dic["character_list"]:
print(i["character_id"])
在旁注上,以这种方式查看 JSON 文件会有所帮助:
"character_list": [
"character_id": "5428662532301799649"
],
"returned": 1
,其中,用大括号“”括起来的元素表示它们在字典中,而用大括号“[]”括起来的元素表示它们在列表中
【讨论】:
以上是关于我无法从 python 中的 JSON API 响应中获取值的主要内容,如果未能解决你的问题,请参考以下文章