我无法从 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_listreturned。数组内还有第二个子字典,它是键 character_list 的值。 所以,你的代码实际上应该是这样的:

for i in dic["character_list"]:
    print(i["character_id"])

旁注上,以这种方式查看 JSON 文件会有所帮助:


    "character_list": [
        
            "character_id": "5428662532301799649"
        
    ],
    "returned": 1

,其中,用大括号“”括起来的元素表示它们在字典中,而用大括号“[]”括起来的元素表示它们在列表中

【讨论】:

以上是关于我无法从 python 中的 JSON API 响应中获取值的主要内容,如果未能解决你的问题,请参考以下文章

无法将 JSON 响应分配给预先声明的数组

为啥我的应用程序无法从我的 API 读取 JSON?

从 python API 获取 JSON

无法将 API JSON 数据呈现到 vue js 中的表

如何将 JSON 响应发送到 Swift 3 中的另一个视图

ReactJS:Rest API JSON 响应:如何解析