Json

如何使用 jq 將多個 JSON 對像中的特定值解析為 csv

  • January 9, 2019

我有以下 json

[
  {
     "ip":"105.105.105.105",
     "timestamp":"1543746097",
     "ports":[
        {
           "port":80,
           "proto":"tcp",
           "status":"open",
           "reason":"syn-ack",
           "ttl":128
        }
     ]
  },
  {
     "ip":"105.105.105.105",
     "timestamp":"1543746097",
     "ports":[
        {
           "port":53,
           "proto":"tcp",
           "status":"open",
           "reason":"syn-ack",
           "ttl":128
        }
     ]
  }
]

我想將埠提取到簡單的csv輸出

80,53

我試過

jq -r '.[]."ports" | map(.port) | @csv' 105.105.105.105_tcp.json

jq -r '.[]."ports" | map(.port) | join(",")' 105.105.105.105_tcp.json

但它們都不起作用。

這是一個僅限 jq 的解決方案:

jq -r '[ .[].ports[].port ]|@csv' network.json
80,53

這裡的方法是檢索埠號,將它們包裝成一個數組,然後將其轉換為 CSV 格式。

我能夠通過

jq -r '.[]."ports" | .[].port' 105.105.105.105_tcp.json | tr '\n' ',' | sed 's/,*$//g'

但是我想知道它是否可以以更優雅的方式完成。

引用自:https://unix.stackexchange.com/questions/485477