想要通过循环获取json的内部元素acces吗

2024-09-28 05:20:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过循环访问json中的dimsmetrics的内部元素alias值,并附加在单独的dimsListmetricsListpython列表中

json_obj = 
{
   "dataset":"246",
   "dims":{
      "Location":{
         "alias":"Location",
         "format":""
      }
   },
   "metrics":{
      "ToTal_Dwell":[
         {
            "agg":"sum",
            "format":"",
            "alias":"ToTal_Dwell"
         }
      ]
   },
   "filters":"",
   "limit":"10"
}

期望结果像dimsList = ['Location']metricsList = ['ToTal_Dwell']


Tags: jsonobjformat元素列表aliaslocationdataset
1条回答
网友
1楼 · 发布于 2024-09-28 05:20:31

可以使用.items()递归地迭代。每次您看到一个内部dict时,您都会进行递归调用,并且内部列表会导致列表中每个内部dict都进行调用

试试这个:

json_obj = {
    "dataset": "246",
    "dims": {
        "Location": {
            "alias": "Location",
            "format": ""
        }
    },
    "metrics": {
        "ToTal_Dwell": [
            {
                "agg": "sum",
                "format": "",
                "alias": "ToTal_Dwell"
            }
        ]
    },
    "filters": "",
    "limit": "10"
}


def extract_inner_values(d, key):
    results = []
    for k, v in d.items():
        if k == key:
            results.append(v)
        if isinstance(v, dict):
            results.extend(extract_inner_values(v, key))
        if isinstance(v, list):
            for inner_d in v:
                results.extend(extract_inner_values(inner_d, key))
    return results


dimsList = extract_inner_values(json_obj["dims"], "alias")
metricsList = extract_inner_values(json_obj["metrics"], "alias")

print(dimsList)
print(metricsList)

输出:

['Location']
['ToTal_Dwell']

相关问题 更多 >

    热门问题