I have a json that looks like this
dict = { "a1": { "b1" : 1 , "b2" ; { "c1" : 24, "c2" : 25}, "b3" : { "c3" : 45, "c4" : 1, "c5" : 4} }, "a2" : 4}
i want to give arrays like so
FIRSTS = ["a1"] SECONDS = ["b1", "b3"] THIRDS = ["c3"]
which would print this :
[b1 : 1], [c3 : 45]
i have written this code
message = ""
for first in FIRSTS:
if first in json_object:
if isinstance(json_object[first], dict):
for second in SECONDS:
if second in json_object[first]:
if isinstance(json_object[first][second], dict):
for third in THIRDS:
if third in json_object[first][second]:
message = message + f"[{third} : {json_object[first][second][third]}], "
else:
message = message + f"[{third} not found], "
else:
message = message + f"[{second} : {json_object[first][second]}], "
else:
message = message + f"[{second} not found], "
else:
message = message + f"[{first} : {json_object[first]}], "
else:
message = message + f"[{first} not found], "
print(message[:-2])
But I’d like a better way to do it
EDIT:
Hey i’m editing for clarification, so i want to print the key value pairs, when the value is not a sub json. So in my code i check for every key in FIRSTS, if it’s value is a json, if it is i check if it has a key that is equal to a key in SECONDS, and repeat with THIRDS, and if the value of the key is not a json i print the key value pair.
EDIT2:
Someone asked for an edit on the input, so i wanted to precise the input could be anything even keys that might not appear in the json, that’s why i do all the checking in my code
2
Answers
USE CASE
CODING
Try to break down your code into separate tasks that are easy to understand and easy to test. In this case, I went with prune_dict and get_leaf_nodes