Home > database >  How do you extract multiple values from JSON?
How do you extract multiple values from JSON?

Time:03-11

I have a JSON file like this:

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"
     }
     ]
}

I need to extract "title", "impactLevel" and "severityLevel" and create a data frame out this:

I have tried this:

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

On this line:

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

I am getting this error:

TypeError: string indices must be integers

Is it possible to extract multiple fields with one call?

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

CodePudding user response:

No, it's not possible. For this to work, the json would need to be nested such that impactLevel were within title, and severityLevel were within impactLevel.

I'd suggest

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

Unless, you want all the fields of the json, in which case you can do:

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

CodePudding user response:

Use operators.itemgetter:

from operator import itemgetter

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

You only need to use list if you specifically need a list; f will return a tuple.

If you want the three values from every element of resp['problems'],

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

Here, you only need list if DataFrame requires a list, rather than an arbitrary iterable.

  • Related