使用jq合并具有公共ID的密钥

安迪

考虑文件“ b.json”:

[
  {
    "id": 3,
    "foo": "cannot be replaced, id isn't in a.json, stay untouched",
    "baz": "do not touch3"
  },
  {
    "id": 2,
    "foo": "should be replaced with 'foo new2'",
    "baz": "do not touch2"
  }
]

和'a.json':

[
  {
    "id": 2,
    "foo": "foo new2",
    "baz": "don't care"
  }
]

我想使用jq和来自a.json的匹配值来更新b.json中的键“ foo”。它也应该与a.json中的多个条目一起使用。

因此,所需的输出为:

[
  {
    "id": 3,
    "foo": "cannot be replaced, id isn't in a.json, stay untouched",
    "baz": "do not touch3"
  },
  {
    "id": 2,
    "foo": "foo new2",
    "baz": "do not touch2"
  }
]

这是使用的几种可能性之一INDEX/2如果您的jq没有内置此功能,请参见下文。

jq --argfile a a.json '
  INDEX($a[]; .id) as $dict
  | map( (.id|tostring) as $id
         | if ($dict|has($id)) then .foo = $dict[$id].foo 
           else . end)' b.json

还有其他方法可以传递a.json和b.json的内容。

警告

上面使用INDEX假定没有“冲突”,例如,如果一个对象的.id等于1,而另一个对象的.id等于“ 1”,则将发生这种情况。如果有可能发生这种冲突,则可以使用更复杂的INDEX定义。

INDEX/2

直接从builtin.jq:

def INDEX(stream; idx_expr):
  reduce stream as $row ({}; .[$row|idx_expr|tostring] = $row);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查找具有公共密钥的哈希数组的最大值?

来自分类Dev

合并具有公共元素的数组

来自分类Dev

没有公共密钥:找不到ID为(XXXXX)的密钥(oss.sonatype.org)

来自分类Dev

合并具有重复ID的多行

来自分类Dev

MySQL合并具有等效ID的行

来自分类Dev

使用公共ID密钥合并两个词典列表

来自分类Dev

如何使用ssh-keygen生成在顶部具有---- BEGIN SSH2 PUBLIC KEY ----的公共密钥?

来自分类Dev

合并具有公共两个公共值的行 蟒蛇

来自分类Dev

在ES6中使用单个公共密钥合并X个对象数组的数组

来自分类Dev

在JQ的公共字段上合并数组元素

来自分类Dev

合并具有公共元素的数组

来自分类Dev

没有公共密钥:找不到ID为(XXXXX)的密钥(oss.sonatype.org)

来自分类Dev

合并具有相同ID的数组

来自分类Dev

如何使用awk合并具有公共字段的文件并在另一个文件中打印

来自分类Dev

如何合并密钥,或处理具有相同文件名的密钥?

来自分类Dev

没有适用于以下密钥ID 1397BC53640DB551的公共密钥

来自分类Dev

AWK用于合并具有公共列的多个文件

来自分类Dev

合并具有重复ID的多行

来自分类Dev

如何基于具有重复行的公共字段合并/合并两个文件

来自分类Dev

合并具有通用ID的多维数组

来自分类Dev

合并具有至少一个公共元素的元组以形成一个公共元组

来自分类Dev

如何使用jq从JSON数组中选择具有特定ID的对象?

来自分类Dev

合并字典中具有公共元素的列表

来自分类Dev

PHP:合并具有公共键的倍数数组

来自分类Dev

使用linux命令行将具有多个匹配项的公共列上长度不等的两个文件合并

来自分类Dev

合并具有相同 ID 的行

来自分类Dev

如何合并具有相同 id 的对象

来自分类Dev

合并值键:具有公共键的值RDD

来自分类Dev

熊猫 | 合并具有相同 id 的行

Related 相关文章

  1. 1

    查找具有公共密钥的哈希数组的最大值?

  2. 2

    合并具有公共元素的数组

  3. 3

    没有公共密钥:找不到ID为(XXXXX)的密钥(oss.sonatype.org)

  4. 4

    合并具有重复ID的多行

  5. 5

    MySQL合并具有等效ID的行

  6. 6

    使用公共ID密钥合并两个词典列表

  7. 7

    如何使用ssh-keygen生成在顶部具有---- BEGIN SSH2 PUBLIC KEY ----的公共密钥?

  8. 8

    合并具有公共两个公共值的行 蟒蛇

  9. 9

    在ES6中使用单个公共密钥合并X个对象数组的数组

  10. 10

    在JQ的公共字段上合并数组元素

  11. 11

    合并具有公共元素的数组

  12. 12

    没有公共密钥:找不到ID为(XXXXX)的密钥(oss.sonatype.org)

  13. 13

    合并具有相同ID的数组

  14. 14

    如何使用awk合并具有公共字段的文件并在另一个文件中打印

  15. 15

    如何合并密钥,或处理具有相同文件名的密钥?

  16. 16

    没有适用于以下密钥ID 1397BC53640DB551的公共密钥

  17. 17

    AWK用于合并具有公共列的多个文件

  18. 18

    合并具有重复ID的多行

  19. 19

    如何基于具有重复行的公共字段合并/合并两个文件

  20. 20

    合并具有通用ID的多维数组

  21. 21

    合并具有至少一个公共元素的元组以形成一个公共元组

  22. 22

    如何使用jq从JSON数组中选择具有特定ID的对象?

  23. 23

    合并字典中具有公共元素的列表

  24. 24

    PHP:合并具有公共键的倍数数组

  25. 25

    使用linux命令行将具有多个匹配项的公共列上长度不等的两个文件合并

  26. 26

    合并具有相同 ID 的行

  27. 27

    如何合并具有相同 id 的对象

  28. 28

    合并值键:具有公共键的值RDD

  29. 29

    熊猫 | 合并具有相同 id 的行

热门标签

归档