给定一个json和字典,其中包含字符串格式的键和子键,在字典中创建一个仅包含键值的json副本 &g



我有一组json与不同级别的数据,但类似的结构。我有一个文件,其中包含相关的值,格式类似于示例。

full_json = {"a": {"a1": 4, "a2": 5}, "b": 2, "c": 3}
relevant_keys = ["['a']['a1']", "['b']"]

我想创建json的副本,只有相关的键值对

expected_json = {"a": {"a1": 4}, "b": 2}

我如何以编程方式做到这一点,以便我可以继续在relevant_keys中添加值,并在不同级别提取不同的数据?删除不是一个选项,因为json可能有新的字段,与我的用例无关。

我使用了字符串的动态求值:

  • 通过eval(f'full_json{k}')获取full_json的值
  • 生成带有占位符的字符串模式,然后执行替换。我用旧的%(只是因为我很懒),但它可以用format重新实现,但你应该逃避{,}。此外,%需要tuple转换,否则只需要*列表。
full_json = {"a": {"a1": 4, "a2": 5}, "b": 2, "c": 3}
relevant_keys = ["['a']['a1']", "['b']"]
expected_json = {}
for k in relevant_keys:
# clean string
k_ids = k[1:-1].replace('][', ' ').split()  # slice rm the open&close bracket
# dictionary pattern with placeholder
k_ids_str = '{%s: ' * len(k_ids) + '%s' + '}' * len(k_ids)
# populate the string-like dictionary
k_dict_cmd = k_ids_str % tuple(k_ids + [eval(f'full_json{k}')])
# evaluate the pattern and update the needed dictionary
expected_json.update(**eval(k_dict_cmd))

print(expected_json)

输出
{'a': {'a1': 4}, 'b': 2}

相关内容

  • 没有找到相关文章

最新更新