I have a dict/JSON
d = {
"company": {
"accounts": {
"account1": {
"accountId": 11111,
"accountName": "testacc",
"environment": "test"
},
"account2": {
"accountId": 22222,
"accountName": "stageacc",
"environment": "stage"
}
}
},
"program": {
"releases": {
"program1": {
"stage": {
"version": "1.1",
"date": "2021-02-01"
},
"prod": {
"version": "1.0",
"date": "2021-01-15"
}
}
}
}
}
which needs to be converted as "path-strings" as below:
[
"/company/accounts/account1/accountId=11111",
"/company/accounts/account1/accountName=testacc",
"/compan1/accounts/account1/environment=test",
"/company/accounts/account2/accountId=22222",
"/company/accounts/account2/accountName=stageacc",
"/company/accounts/account2/environment=stage",
"/program/releases/program1/stage/version=1.1",
"/program/releases/program1/stage/date=2021-02-01",
"/program/releases/program1/prod/version=1.0",
"/program/releases/program1/prod/date=2021-01-15
]
So the form is basically like this: [ “/key/nestedkey=value“]
I am using recursion to check the nested value type and build the string, but I fail.
Here is what I have tried:
from pprint import pprint
path = []
main_list = []
def serializer(json):
for k,v in json.items():
if type(v) is dict:
path.append(k)
serializer(v)
else:
build_key(k, v)
def build_key(k, v):
return main_list.append("/".join(path) + f"/{k}={v}")
serializer(d)
pprint(main_list)
My erroneous output:
['company/accounts/account1/accountId=11111',
'company/accounts/account1/accountName=testacc',
'company/accounts/account1/environment=test',
'company/accounts/account1/account2/accountId=22222',
'company/accounts/account1/account2/accountName=stageacc',
'company/accounts/account1/account2/environment=stage',
'company/accounts/account1/account2/program/releases/program1/stage/version=1.1',
'company/accounts/account1/account2/program/releases/program1/stage/date=2021-02-01',
'company/accounts/account1/account2/program/releases/program1/stage/prod/version=1.0',
'company/accounts/account1/account2/program/releases/program1/stage/prod/date=2021-01-15']
Check out the code here: https://replit.com/join/jvjngast-deeprony7
How do I solve this?