I have this piece of code
import json
class Object:
def toJSON(self):
return json.dumps(self, default=lambda o: o.__dict__,
sort_keys=False, indent=4)
languages={"pl_PL":"1","en_US":"2","de_DE":"4","fr_FR":"10","cs_CZ":"6"}
def generateJSON():
product=Object()
for lang in languages.keys():
product.translations = Object()
product.translations.lang=Object()
product.translations.lang.name = "xxx"
print(product.toJSON())
if __name__ == '__main__':
generateJSON()
Which gives me an output:
{ "translations": { "lang": { "name": "xxx" } } }
How can I assing lang value to my Object name to get the output:
{ "translations": { "pl_PL": { "name": "xxx" }, { "en_US": { "name": "xxx" } }etc... }
CodePudding user response:
To use the string names in lang
each time round the loop you need to use setattr()
and getattr()
:
import json
class Object:
def toJSON(self):
return json.dumps(self, default=lambda o: o.__dict__,
sort_keys=False, indent=4)
languages={"pl_PL":"1","en_US":"2","de_DE":"4","fr_FR":"10","cs_CZ":"6"}
def generateJSON():
product=Object()
product.translations = Object()
for lang in languages.keys():
setattr(product.translations,lang,Object())
getattr(product.translations,lang).name = "xxx"
print(product.toJSON())
if __name__ == '__main__':
generateJSON()
Output as requested.