【问题标题】:I can't get a value from a JSON API response in python我无法从 python 中的 JSON API 响应中获取值
【发布时间】: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}

【问题讨论】:

    标签: python json response


    【解决方案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
          }
          

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

          【讨论】:

            猜你喜欢
            • 2021-11-26
            • 1970-01-01
            • 1970-01-01
            • 2020-07-09
            • 2022-09-26
            • 2019-08-15
            • 2016-04-05
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多