【问题标题】:Accessing deeply nested items in json list object访问 json 列表对象中的深层嵌套项
【发布时间】:2022-11-04 19:25:31
【问题描述】:

在 Python3 中,我正在执行一个 GET 请求以接收带有重复项的非常长的 JSON 响应。 整个响应输出存储到一个全局变量中,如下所示:

def get_users():
    url = "https://blablabla/api/users"
    headers = {"Authorization": accessToken, "Content-Type": "application/json", "Accept": "application/json"}
    r = requests.get(url, headers=headers)
    r_dict = r.json()
    return r_dict

get_user_function = get_users()

回复:

[
    {
        "created": "2021-01-1 09:02:35.112 +0000 UTC",
        "id": "123456",
        "clientID": "client_client",
        "name": "name_name",
        "old": true,
        "config": {
            "config_option_1": false,
            "config_option_2": true,
            "config_option_3": false,
            "config_option_4": false,
            "config_option_5": false,
            "config_option_6": false,
            "config_option_7": false,
            "config_option_8": "123",
            "config_option_9": "456",
            "config_option_10": "",
            "config_option_11": {},
            "config_option_12": {
                "config_option_12.1": {
                    "config_option_12.1.1": true,
                    "config_option_12.1.2": true,
                    "config_option_12.1.3": false,
                    "config_option_12.1.4": true,
                    "config_option_12.1.5": false,
                    "config_option_12.1.6": false,
                    "config_option_12.1.7": false,
                    "config_option_12.1.8": false
                }}}}]

这大约是第一个响应项目的一半,整个响应对象包含数千个这些项目。 现在我想创建一个字典并用给定列表中的几个项目填充它。

关于如何访问更深的嵌套项目(如 e)的任何想法或改进。 G。项目["config"]["config_option_12"]["config_option_12.1"]["cofnig_option_12.1.1"]?

到目前为止,我有这个:

my_dict = {item["name"]: [item["id"], item["created"], item["config"]["config_option_12"]] for item in get_user_function}
print(my_dict)

在这里,我正在努力访问“config”的子项。 “Config_option_1 - 11”工作得非常好,但“config_option_12”并进一步推出KeyError:“config_option_12”。

【问题讨论】:

    标签: python-3.x dictionary for-loop nested-lists


    【解决方案1】:

    假设你有一个 json 文件。 这对我有用

    import json 
     
    with open('abc.json', 'r') as f:
        mydict = {'value': item['config']['config_option_12']['config_option_12.1']['config_option_12.1.1'] for item in json.load(f)}
    
    print(mydict)
    # result {'value': True}
    

    也许尝试将您的 r_json 存储在某个文件中,然后做我所做的,然后再试一次

    【讨论】:

      【解决方案2】:

      它实际上不是一个文件。我只有清单。 我设法成功地遍历了这样的列表:

      my_dict = {}
      
      for i in range(len(get_tenant_function)):
        try:
          item = get_tenant_function[i]
          my_dict[i] = {item["name"]: item["config"]["config_option_12"]["config_option_12.1"]}
        except KeyError:
          continue
      

      这样,我将空字典附加到每个项目的名称中,并附加了多个 config_options。 但 看来,并非所有 2700 个项目都是平等的。存在差异(例如,有些没有 config_option_12 或没有“创建”),最终导致 KeyError。 是否有任何其他 JSON 库可以更好地处理嵌套 JSON?我这样做的方式最终会导致每个不存在的项目都有 50 个例外。

      【讨论】:

        猜你喜欢
        • 2020-12-15
        • 1970-01-01
        • 2020-09-04
        • 2013-10-12
        • 1970-01-01
        • 2021-02-20
        • 2020-01-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多