Py学习  »  Python

如何在python中从json中提取多个值

user1471980 • 3 年前 • 1867 次点击  

我有这样一个JSON文件:

print(resp)
dataList = []
{
  "totalCount": 9812,
  "pageSize": 50,
  "nextPageKey": "12345",
  "problems": [
    {
      "problemId": "1234",
      "displayId": "test1",
      "title": "host memory saturation",
      "impactLevel": "INFRASTRUCTURE",
      "severityLevel": "RESOURCE_CONTENTION",
      "status": "OPEN"
     }
     ]
}

我需要提取“title”、“impactLevel”和“severityLevel”,并创建一个数据框架:

我试过:

dataList.append([resp['problems'][0]['title']['impactLevel']['severityLevel']])
hyperEntitydf = pd.DataFrame(dataList, columns=['Alert','Type','Severity'])
hyperEntitydf=hyperEntitydf.drop_duplicates()
print(hyperEntitydf.head())

在这一行:

 dataList.append([resp['problems'][0]['title']['impactLevel']['severityLevel']])

我得到了这个错误:

TypeError: string indices must be integers

一次调用可以提取多个字段吗?

dataList.append([resp['problems'][0]['title']['impactLevel']['severityLevel']])
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/128459
文章 [ 2 ]  |  最新文章 3 年前
chepner
Reply   •   1 楼
chepner    3 年前

使用 operators.itemgetter :

from operator import itemgetter

f = itemgetter('title', 'impactLevel', 'severityLevel')
dataList.append(list(f(resp['problems'][0])))

你只需要使用 list 如果你特别需要一份清单; f 将返回一个元组。

如果你想从 resp['problems'] ,

dataList = list(map(f, resp['problems']))

这里,你只需要 列表 如果 DataFrame 需要列表,而不是任意的iterable。

Alex
Reply   •   2 楼
Alex    3 年前

不,不可能。为了实现这一点,json需要嵌套,以便impactLevel位于title内,severityLevel位于impactLevel内。

我建议

x = resp['problems'][0]
dataList.append([x['title'], x['impactLevel', x['severityLevel'])

除非你想 全部的 json的字段,在这种情况下,您可以执行以下操作:

dataList.append(list(resp['problems'][0].values()))