从json对象获取具有键名的值

问题描述 投票:0回答:1

我正在尝试从python列表对象的特定列中检索值。这是来自Log Analytics API的响应格式-https://dev.loganalytics.io/documentation/Using-the-API/ResponseFormat

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
    "tables": [
        {
            "name": "PrimaryResult",
            "columns": [
                {
                    "name": "Category",
                    "type": "string"
                },
                {
                    "name": "count_",
                    "type": "long"
                }
            ],
            "rows": [
                [
                    "Administrative",
                    20839
                ],
                [
                    "Recommendation",
                    122
                ],
                [
                    "Alert",
                    64
                ],
                [
                    "ServiceHealth",
                    11
                ]
            ]
        }
    ]
}

有数百列,我想读取特定的列和行值。为此,我最初尝试为该列查找索引,例如“ Category”,然后从行中检索所有值。这是我到目前为止所做的。

result=requests.get(url, params=params, headers=headers, verify=False)
index_category = (result.json()['tables'][0]['columns']).index('Category')

结果包含上面发布的格式的数据。我得到以下错误。我想念什么?

ValueError: 'Category' is not in list

我希望能够从循环中的行数组中检索类别值。我也在循环下面完成了此操作,我能够得到我想要的,但是想确认是否有更好的方法可以做到这一点。另外,我在读取行值之前先检索列索引,因为我怀疑盲目读取带有显式索引值的行值容易出错,特别是当列顺序发生更改时。

for column in range(0,columns):
    if ((result.json()['tables'][0]['columns'][column]['name']) == 'Category'):
        index_category = column

for row in range(0,rows):
    print(result.json()['tables'][0]['rows'][row][index_category])
python
1个回答
0
投票
json_data = results.json() for index, columns in enumerate(json_data['tables'][0]['columns']): if columns['name'] == 'Category': category_index = index break category_list = [] for row in json_data['tables'][0]['rows']: category_list.append(row[category_index])
尚待测试。
© www.soinside.com 2019 - 2024. All rights reserved.