Python 如何使用其他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"

我有两个json文件:
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实现这一点?