gpt4 book ai didi

json - jq 加入公共(public)键

转载 作者:行者123 更新时间:2023-12-04 17:12:57 25 4
gpt4 key购买 nike

我对 jq 很陌生这篇文章是因为不了解背后的机制 jq .
我可以开发一个 bash 脚本,它可以做我想要的但 jq 并且它是 JSON超能力引起了我的兴趣,我想通过应用于现实世界的场景来学习它。这是一个...
顺便说一句,我试图利用现有的 jq 相关 SO 解决方案来合并/加入 JSON,但失败了。
我最接近我需要的是使用 INDEX 和 $x + 的串联。 ,但是我只从我的第二个 (c2) json 中获得了最后一个项目.
所以,我的问题如下:
有两个JSON文件:

  • JSON #1 将具有唯一的“id”和“type”键 - 在其他键/值对中,为了更好地清晰我的帖子,我已将其删除。
  • JSON #2 将包含多个/非唯一“类型”键,我想匹配这两个 JSON 文件。此 JSON #2 还将包含其他键/值对,这些键/值对预计将包含在结果输出中。

  • 我的输出要求是:
    我想获得一个(每行一个或一个数组)列表,其中包含 c1 和 c2 数组之间匹配键/值对的所有组合,其中“类型”键(字符串)的值在 c1 和 c2 之间完全匹配。
    还有一个问题,扩展解决方案以在三个 JSON 之间执行类似的匹配/连接会困难多少?文件一次 - 再次在特定键的相同值上?
    任何有关如何解决和了解如何解决此问题的帮助甚至只是提示将不胜感激!
    第一个输入文件: JSON #1,数组 c1(集合 1)
    { "c1":
    [
    { "c1id":1, "type":"alpha" },
    { "c1id":2, "type":"beta" }
    ]
    }
    第二个输入文件: JSON #2,数组 c2(集合 2)
    {
    "c2":
    [
    { "c2id":1,"type":"alpha","serial":"DDBB001"} ,
    { "c2id":2,"type":"beta","serial":"DDBB007"} ,
    { "c2id":3,"type":"alpha","serial":"DDTT005"} ,
    { "c2id":4,"type":"beta","serial":"DDAA002"} ,
    { "c2id":5,"type":"yotta","serial":"DDCC017"}
    ]
    }
    预期输出:
    {"c1id":1,"type":"alpha","c2id":1,"serial":"DDBB001"}
    {"c1id":1,"type":"alpha","c2id":3,"serial":"DDTT005"}
    {"c1id":2,"type":"beta","c2id":2,"serial":"DDBB007"}
    {"c1id":2,"type":"beta","c2id":4,"serial":"DDAA002"}
    您会注意到 c2 中的类型“yotta”未包含在输出中。这是意料之中的。只有存在于 c1 中且匹配 c2 的“类型”才会出现在结果中。我想这是一个匹配/连接练习暗示了这一点 - 我添加它只是为了清楚起见 - 我希望它有效。

    最佳答案

    下面是一个使用 INDEX 和 JOIN 的例子:

    jq --compact-output --slurpfile c1 c1.json '
    INDEX(
    $c1[0].c1[];
    .type
    ) as $index |
    JOIN(
    $index;
    .c2[];
    .type;
    reverse|add
    )
    ' c2.json
    INDEX 的第一个参数需要产生一个项目流,这就是我们应用 [] 的原因。分别从数组中获取项目。第二个参数选择我们的索引键。
    我们使用 JOIN 的四参数版本。第一个参数是索引本身,第二个是要连接到索引的对象流,第三个参数从流对象中选择查找键,第四个参数是组装连接对象的表达式。该表达式的输入是一个由两项组成的数组流,每个数组看起来像这样:
    [{"c2id":1,"type":"alpha","serial":"DDBB001"},{"c1id":1,"type":"alpha"}]
    由于我们只想组合来自我们只使用的对象的所有键和值 add ,但我们先 reverse数组在 c2 字段之前很好地排列 c1 字段。最终结果如您所愿:
    {"c1id":1,"type":"alpha","c2id":1,"serial":"DDBB001"}
    {"c1id":2,"type":"beta","c2id":2,"serial":"DDBB007"}
    {"c1id":1,"type":"alpha","c2id":3,"serial":"DDTT005"}
    {"c1id":2,"type":"beta","c2id":4,"serial":"DDAA002"}

    关于json - jq 加入公共(public)键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69134020/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com