From ea4437b9d2087a6592c29d597455834383cf49e6 Mon Sep 17 00:00:00 2001 From: DevilXD <4180725+DevilXD@users.noreply.github.com> Date: Sun, 15 Sep 2024 14:53:39 +0200 Subject: [PATCH] JSON loading now generally ensures loaded value type matches the template --- utils.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/utils.py b/utils.py index b0c63a4..9367874 100644 --- a/utils.py +++ b/utils.py @@ -223,16 +223,14 @@ def merge_json(obj: JsonType, template: Mapping[Any, Any]) -> None: # NOTE: This modifies object in place for k, v in list(obj.items()): if k not in template: + # unknown key: overwrite from template del obj[k] - elif isinstance(v, dict): - if isinstance(template[k], dict): - merge_json(v, template[k]) - else: - # object is a dict, template is not: overwrite from template - obj[k] = template[k] - elif isinstance(template[k], dict): - # template is a dict, object is not: overwrite from template + elif type(v) is not type(template[k]): + # types don't match: overwrite from template obj[k] = template[k] + elif isinstance(v, dict): + assert isinstance(template[k], dict) + merge_json(v, template[k]) # ensure the object is not missing any keys for k in template.keys(): if k not in obj: