簡體   English   中英

使用 `jq` 將鍵/值添加到使用另一個 json 文件作為源的 json 文件

[英]Using `jq` to add key/value to a json file using another json file as a source

已經為此苦苦掙扎了一段時間,但我離解決方案還很近。 我對使用jq不是很有經驗。

我想從一個 json 文件中獲取值,並在 dict 中的其他值匹配時將它們添加到另一個文件中。 下面的示例文件比解釋更清楚地展示了我想要的東西。

主機.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"
    }
  ]
}

代理.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 (來自proxies.json )的值添加為.hosts[].proxy_host (到hosts.json

只有當.hosts[].proxy_hostid等於.proxies[].proxyid

所需的 output:

{
  "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'

我發現了這些問題,但它們沒有幫助:(

使用您的proxies.json的替代版本確實更容易。 您只需將代理存儲在變量中作為參考,並在更新主機時從中檢索代理主機。

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

在線演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM