Hi I've got json data that looks something like this:
{
"content": {
"Header 1": [
{
"name": "Name1",
}
},
{
"name": "Name2",
}
}
],
"Header 2": [
{
"name": "Name3",
}
}
],
}
}
I'm looking to convert this into lists that look something like this:
header1 = ["Name1", "Name2"]
header2 = ["Name3"]
So far I've been able to get all the names that I want using objectpath.
from importlib.resources import path
import json
from unicodedata import name
import objectpath
path = (r"C:\Users\path\example.json")
with open(path) as json_file:
data = json.load(json_file)
tree_obj = objectpath.Tree(data)
names = list(tree_obj.execute('$..name'))
print (names)
But I've been unable to get the appropriate headers for each name as it appears to be nested under the 'content' header
Any help would be appreciated. Thanks :)
CodePudding user response:
This does what you ask. Just iterate through the keys of "content", and grab the keys in the subobjects.
import json
jsonx = """{
"content": {
"Header 1": [
{
"name": "Name1"
},
{
"name": "Name2"
}
],
"Header 2": [
{
"name": "Name3"
}
]
}
}"""
data = json.loads(jsonx)
gather = {}
for k, v in data["content"].items():
k1 = k.lower().replace(' ','')
v1 = [vv['name'] for vv in v]
gather[k1] = v1
print(gather)
Output:
{'header1': ['Name1', 'Name2'], 'header2': ['Name3']}
And for those who like one-liners:
gather = dict(
(k.lower().replace(' ',''),[vv['name'] for vv in v])
for k, v in data["content"].items() )