使用`jq`将键/值添加到json文件,并使用另一个json文件作为源

大卫

苦苦挣扎了一段时间,我离解决方案还很近。我使用的经验不是很丰富jq

我想从一个json文件中获取值,然后在dict中的其他值匹配时将它们添加到另一个文件中。下面的示例文件比解释更清楚地说明了我想要的内容。

hosts.json:

{
  "hosts": [
    {
      "host": "hosta.example.com",
      "hostid": "101",
      "proxy_hostid": "1"
    },
    {
      "host": "hostb.example.com",
      "hostid": "102",
      "proxy_hostid": "1"
    },
    {
      "host": "hostc.example.com",
      "hostid": "103",
      "proxy_hostid": "2"
    }
  ]
}

proxies.json:

{
  "proxies": [
    {
      "host": "proxy1.example.com",
      "proxyid": "1"
    },
    {
      "host": "proxy2.example.com",
      "proxyid": "2"
    }
  ]
}

我还提供了上面的文件,其中proxyid作为密钥,如果这样做更容易:

{
  "proxies": {
    "1": {
      "host": "proxy1.example.com",
      "proxyid": "1"
    },
    "2": {
      "host": "proxy2.example.com",
      "proxyid": "2"
    }
  }
}

使用上面的这些json文件(来自Zabbix API),我想将.proxies[].host(from proxies.json的值添加.hosts[].proxy_host(to hosts.json)。

只有当.hosts[].proxy_hostid等于.proxies[].proxyid

所需的输出:

{
  "hosts": [
    {
      "host": "hosta.example.com",
      "hostid": "101",
      "proxy_hostid": "1",
      "proxy_host": "proxy1.example.com"
    },
    {
      "host": "hostb.example.com",
      "hostid": "102",
      "proxy_hostid": "1",
      "proxy_host": "proxy1.example.com"
    },
    {
      "host": "hostc.example.com",
      "hostid": "103",
      "proxy_hostid": "2",
      "proxy_host": "proxy2.example.com"
    }
  ]
}

我尝试了许多不同的方法来执行此操作,并且认为我需要使用jq -sjq --slurpfile,但是我遇到了很多麻烦,无法找到解决方案。

jq 'input as $p | map(.[].proxy_host = $p.proxies[].proxyid)' hosts.json proxies.json

我想我也需要类似的东西,但不确定如何使用它。

if .hosts[].proxy_hostid == .proxies[].proxyid then .hosts[].proxy_host = .proxies[].host else empty end'

我发现了这些问题,但没有帮助:(

oguz ismail

使用的另一种版本确实更容易proxies.json您所需要做的就是将代理存储在变量中作为参考,并在更新主机时从中检索代理主机。

jq 'input as { $proxies } | .hosts[] |= . + { proxy_host: $proxies[.proxy_hostid].host }' hosts.json proxies.json

在线演示

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将stdin作为另一个文件添加到tar存档中

来自分类Dev

如何将多维数组的键值添加到另一个数组

来自分类Dev

如何将XIB文件中的UIView作为子视图添加到另一个Xib文件

来自分类Dev

将最后一列从另一个文件添加到文件

来自分类Dev

如何使用Shell将字符串添加到另一个目录中文件集合名称的开头

来自分类Dev

将新的WPF窗口添加到另一个文件夹

来自分类Dev

将一个.csv中的列添加到另一个.csv文件中

来自分类Dev

如何使用FFMpeg将背景音乐添加到另一个音频文件中?

来自分类Dev

按顺序将一个json的键值附加到另一个

来自分类Dev

使用一些参数将另一个小节添加到RenderFragment

来自分类Dev

使用Powershell将新XML节点从一个文件附加或添加到另一个文件

来自分类Dev

如何将工作表从Excel文件添加到另一个文件?

来自分类Dev

将一个.csv中的列添加到另一个.csv文件中

来自分类Dev

使用bash脚本将XML文件的内容添加到另一个文件中

来自分类Dev

将已下载的源项目的引用添加到另一个项目时,得到“无法加载文件或程序集”

来自分类Dev

将另一个对象添加到现有的JSON中

来自分类Dev

将列文本文件的标题添加到另一个文件

来自分类Dev

将事件侦听器添加到另一个文件

来自分类Dev

cat:将文本文件作为Dolphin动作添加到另一个文件夹中

来自分类Dev

将新的WPF窗口添加到另一个文件夹

来自分类Dev

如何将文件中的特定行添加到另一个文件中的特定行的末尾?(可能使用sed)

来自分类Dev

如何将混音从一个文件添加到另一个文件

来自分类Dev

在 Google App Engine 中使用 JavaScript 将可下载文件添加到另一个页面

来自分类Dev

使用 jq 用另一个 json 更新一个 json 文件中的密钥对(在另一级别)

来自分类Dev

将视图从 MainActivity 添加到另一个 xml 文件布局

来自分类Dev

如何将数据添加到另一个文件变量中的数组?

来自分类Dev

复制 CSV 文件的一整列并使用 shell 脚本将其添加到另一个文件

来自分类Dev

使用codeigniter中的键值将数组添加到另一个数组中

来自分类Dev

如何从 json 文件中选择找到另一个值匹配的值使用 jq

Related 相关文章

  1. 1

    将stdin作为另一个文件添加到tar存档中

  2. 2

    如何将多维数组的键值添加到另一个数组

  3. 3

    如何将XIB文件中的UIView作为子视图添加到另一个Xib文件

  4. 4

    将最后一列从另一个文件添加到文件

  5. 5

    如何使用Shell将字符串添加到另一个目录中文件集合名称的开头

  6. 6

    将新的WPF窗口添加到另一个文件夹

  7. 7

    将一个.csv中的列添加到另一个.csv文件中

  8. 8

    如何使用FFMpeg将背景音乐添加到另一个音频文件中?

  9. 9

    按顺序将一个json的键值附加到另一个

  10. 10

    使用一些参数将另一个小节添加到RenderFragment

  11. 11

    使用Powershell将新XML节点从一个文件附加或添加到另一个文件

  12. 12

    如何将工作表从Excel文件添加到另一个文件?

  13. 13

    将一个.csv中的列添加到另一个.csv文件中

  14. 14

    使用bash脚本将XML文件的内容添加到另一个文件中

  15. 15

    将已下载的源项目的引用添加到另一个项目时,得到“无法加载文件或程序集”

  16. 16

    将另一个对象添加到现有的JSON中

  17. 17

    将列文本文件的标题添加到另一个文件

  18. 18

    将事件侦听器添加到另一个文件

  19. 19

    cat:将文本文件作为Dolphin动作添加到另一个文件夹中

  20. 20

    将新的WPF窗口添加到另一个文件夹

  21. 21

    如何将文件中的特定行添加到另一个文件中的特定行的末尾?(可能使用sed)

  22. 22

    如何将混音从一个文件添加到另一个文件

  23. 23

    在 Google App Engine 中使用 JavaScript 将可下载文件添加到另一个页面

  24. 24

    使用 jq 用另一个 json 更新一个 json 文件中的密钥对(在另一级别)

  25. 25

    将视图从 MainActivity 添加到另一个 xml 文件布局

  26. 26

    如何将数据添加到另一个文件变量中的数组?

  27. 27

    复制 CSV 文件的一整列并使用 shell 脚本将其添加到另一个文件

  28. 28

    使用codeigniter中的键值将数组添加到另一个数组中

  29. 29

    如何从 json 文件中选择找到另一个值匹配的值使用 jq

热门标签

归档