如何使用公共密钥合并 2 个 json 文件

Posted

技术标签:

【中文标题】如何使用公共密钥合并 2 个 json 文件【英文标题】:How to merge 2 json files with a common key 【发布时间】:2022-01-22 06:31:16 【问题描述】:

我想合并 2 个 JSON 文件

带有空的tests.json,其中一些是嵌套的


  "tests": [
    "id": 1,
    "value": "",
    "values": "info..."
  , 
    "id": 41,
    "title": "Debug test",
    "value": "",
    "values": [
      "id": 345,
      "value": "",
      "values": [ 
        "id": 230,
        "values": [
          "id": 234,
          "value": ""
        , 
          "id": 653,
          "value": ""
        ]
      ]
    ],
  , ...

values.json 与 value


  "values": [
    "id": 2,
    "value": "passed"
  , 
    "id": 41,
    "value": "passed"
  , 
    "id": 345,
    "value": "passed"
  , 
    "id": 230,
    "value": "passed"
  ,
    "id": 234,
    "value": "passed"
  ,
    "id": 653,
    "value": "passed"
  ,...

这段代码运行良好,但我需要让它更兼容

import json

with open("tests.json") as fo:
    data1 = json.load(fo)
with open("values.json") as fo:
    data2 = json.load(fo)

for dest in data1['tests']:

    if 'values' in dest:
        for dest_1 in dest['values']:
            if 'values' in dest_1:
                for dest_2 in dest_1['values']:
                    if 'values' in dest_2:
                        for dest_3 in dest_2['values']:

                            for source in data2['values']:
                                if source['id'] == dest_3['id']:
                                    dest_3['value'] = source['value']

                    for source in data2['values']:
                        if source['id'] == dest_2['id']:
                            dest_2['value'] = source['value']

            for source in data2['values']:
                if source['id'] == dest_1['id']:
                    dest_1['value'] = source['value']

    for source in data2['values']:
        if source['id'] == dest['id']:
            dest['value'] = source['value']

with open("report.json", "w") as write_file:
    json.dump(data1, write_file, indent=2)

据我了解,我需要递归检查 file1.json 在该块内是否有“values”参数和空的“value”参数。此外,我无法触摸源 tests.json,只能创建另一个文件来保存所有更改。

【问题讨论】:

这能回答你的问题吗? Merge JSON data with Python 那条评论无济于事,原因不同 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

那是因为你正在更新根 json 对象并得到一个


    "tests": [...],
    "values": [...]

而您想要的是从单个“值”更新单个“测试”并得到只是


    "tests": [...]

结果。

尝试遍历两个 json 中的每个对象。

【讨论】:

是的,而且是嵌套在 tests.json 文件中的“值”

以上是关于如何使用公共密钥合并 2 个 json 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jq 合并来自 2 个文件的 2 个 JSON 对象?

如何从 json 对象中获取密钥

如何基于公共列合并两个 FMResultSet?

服务如何生成和使用公共和秘密 API 密钥?

如何在 C# 中合并两个数据表(没有任何公共标识符)?8

如何合并两个 JSON 文件? [复制]