json - 我可以使用 jq 使用 JSON 文件中的参数来过滤和修改另一个 JSON 文件吗?

标签 json file parameters jq

假设我有两个输入 JSON 文件。第一个是:

[
    {
        "name": "one",
        "keyB": "2",
        "keyC": "3"
    },
    {
        "name": "two",
        "keyB": "15",
        "keyC": "20"
    }
]

第二个:

{
    "name": "one",
    "type": "FeatureCollection",
    "features": [
        {
            "name": "one",
            "valueA": "0",
            "valueB" : "0"
        },  
        {
            "name": "two",
            "valueA": "11",
            "valueB": "21"
        },
        {
            "name": "one",
            "valueA": "21",
            "valueB": "30"
        },  
        {
            "name": "two",
            "valueA": "1",
            "valueB": "2"
        },
        {
            "name": "one",
            "valueA": "2",
            "valueB": "3"
        },  
        {
            "name": "two",
            "valueA": "5",
            "valueB": "3"
        }
    ]
}

我想创建一个逻辑,当第一个文件中的 .[].name 等于第二个文件中的 .features[].name 时,我将第一个文件中的相应键连接到第二个文件上(考虑到第一个文件上的 .[].name 值始终是唯一的)。所以结果如下:

{
    "name": "one",
    "type": "FeatureCollection",
    "features": [
        {
            "name": "one",
            "valueA": "0",
            "valueB" : "0",
            "keyB": "2",
            "keyC": "3"
        },  
        {
            "name": "two",
            "valueA": "11",
            "valueB": "21",
            "keyB": "15",
            "keyC": "20"
        },
        {
            "name": "one",
            "valueA": "21",
            "valueB": "30",
            "keyB": "2",
            "keyC": "3"
        },  
        {
            "name": "two",
            "valueA": "1",
            "valueB": "2",
            "keyB": "15",
            "keyC": "20"
        },
        {
            "name": "one",
            "valueA": "2",
            "valueB": "3",
            "keyB": "2",
            "keyC": "3"
        },  
        {
            "name": "two",
            "valueA": "5",
            "valueB": "3",
            "keyB": "15",
            "keyC": "20"
        }
    ]
}

在此输出中,我只是检查了两个 JSON 文件中的 name 是否相等,然后我引入了键 keyB: "2", "keyC": "3" 其中 name == "one"keyB: "15", "keyC": "20" 其中 name == "two" >。可以用jq来做吗?我可以通过从一个文件获取参数并将其传递给另一个文件的方式来处理两个 JSON 文件吗?

最佳答案

是的,只需将第一个保存在变量中即可。

INDEX(.name) as $p | inputs | .features |= map($p[.name] + .)

Online demo

关于json - 我可以使用 jq 使用 JSON 文件中的参数来过滤和修改另一个 JSON 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68076934/

相关文章:

java - 错误: cannot find symbol

javascript - 如何在选项选择中创建json格式的数组

Python,在解析 JSON 对象时正确处理关键错误

arrays - 如何在本地数组 swift 3 中保存来自 Alamofire 的 response.result.value

arrays - 序列化错误

java - java watchservice实现重命名和删除

parameters - 如何在 Aurelia 中动态绑定(bind) route-href 参数?

python - 基方法和子方法签名中的参数数量不一致

c# - 从流阅读器中删除最后 x 行

c - 为什么文件的字符数相同时文件大小不同?