This is the json object I have
[
{
"person": "abc",
"city": "united states",
"facebooklink": "link",
"united states": [
{
"person": "cdf",
"city": "ohio",
"facebooklink": "link",
"ohio": [
{
"person": "efg",
"city": "clevland",
"facebooklink": "link",
"clevland": [
{
"person": "jkl",
"city": "Street A",
"facebooklink": "link",
"Street A": [
{
"person": "jkl",
"city": "House 1",
"facebooklink": "link"
}
]
}
]
},
{
"person": "ghi",
"city": "columbus",
"facebooklink": "link"
}
]
},
{
"person": "abc",
"city": "washington",
"facebooklink": "link"
}
]
}
]
And I want to create the below json adding address fields dynamically to the json.
[
{
"person": "abc",
"city": "united states",
"facebooklink": "link",
"address": "united states",
"united states": [
{
"person": "cdf",
"city": "ohio",
"facebooklink": "link",
"address": "united states/ohio",
"ohio": [
{
"person": "efg",
"city": "clevland",
"facebooklink": "link",
"address": "united states/ohio/clevland",
"clevland": [
{
"person": "jkl",
"city": "Street A",
"facebooklink": "link",
"address": "united states/ohio/clevland/Street A",
"Street A": [
{
"person": "jkl",
"city": "House 1",
"facebooklink": "link",
"address": "united states/ohio/clevland/Street A/House 1"
}
]
}
]
},
{
"person": "ghi",
"city": "columbus",
"facebooklink": "link",
"address": "united states/ohio/columbus"
}
]
},
{
"person": "abc",
"city": "washington",
"facebooklink": "link",
"address": "united states/washington"
}
]
}
]
``
How can I achieve this in Python.
I tried my best to solve. see if this helps. wrote code with short json. but you can use complete nested json as input.
# import json
given_data = [
{
"person": "abc",
"city": "united states",
"facebooklink": "link",
"united states": [
{
"person": "cdf",
"city": "ohio",
"facebooklink": "link"
},
{
"person": "abc",
"city": "washington",
"facebooklink": "link"
}
]
}
]
PARENT_TOP = ""
city = "city"
address = 'address'
def update_address(parent_node, my_path=PARENT_TOP):
if isinstance(parent_node, list):
for child_node in parent_node:
if isinstance(child_node, dict):
city = child_node.get("city")
new_path = f"{my_path}/{city}" if my_path else city
child_node[address] = new_path
grand_child = child_node.get(city)
update_address(grand_child, new_path)
elif isinstance(parent_node, dict):
city = parent_node.get("city")
new_path = f"{my_path}/{city}" if my_path else city
parent_node[address] = new_path
child = parent_node.get(city)
update_address(child, new_path)
else:
pass
return parent_node
if __name__ == '__main__':
update_address(given_data)
# output = json.dumps(json.loads(str(given_data)), indent=2)
print(given_data)