Python 如何使用其他json文件中的值更新json文件?
我有两个json文件:Python 如何使用其他json文件中的值更新json文件?,python,json,python-3.x,python-requests,Python,Json,Python 3.x,Python Requests,我有两个json文件:config.json和update.json。如何根据update.json中的值更新现有的config.json文件?update.json中的key:value将不包括父键信息,并假定所有键都是唯一的。有没有办法在python中实现这一点 config.json: { "glossary": { "title": "example glossary", "GlossDiv": { "title": "S"
config.json
和update.json
。如何根据update.json
中的值更新现有的config.json
文件?update.json
中的key:value
将不包括父键信息,并假定所有键都是唯一的。有没有办法在python中实现这一点
config.json
:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
{"ID": "ABC",
"GlossSeeAlso": ["ABC", "DEF"]
}
update.json
:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
{"ID": "ABC",
"GlossSeeAlso": ["ABC", "DEF"]
}
python的输出应该是这样的:
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "ABC",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["ABC", "DEF"]
},
"GlossSee": "markup"
}
}
}
}
}
最简单的方法是使用递归函数实现:
def update(base, new):
if isinstance(base, dict):
for k, v in new.items():
if k in base:
base[k] = v
return {k: update(v, new) for k, v in base.items()}
else:
return base
只需使用您的初始JSON对象和更新映射调用它,您就会得到您在问题中提供的输出。假设您知道如何加载
JSON
文件,您只需递归地修改字典即可:
def update_dict(d, key, new_value):
for k, v in d.items():
if k == key:
d[k] = new_value
return True
elif isinstance(v, dict):
if update_dict(v, key, new_value):
return True
return False
这将修改原始dict,如果您不想这样做,请使用@scnerd solution
然后,您可以这样使用它,其中config是使用要更改的值修改和更新字典的字典:
for k, v in update.items():
update_dict(config, k, v)
请向我们展示您迄今为止所做的尝试,您能否展示如何在kotlin或java中为android实现这一点?