1

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']])

2 Answers 2

1

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()))
Sign up to request clarification or add additional context in comments.

Comments

1

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.