如何使用 jq 将来自多个 JSON 对象的特定值解析为 csv

Pet*_*rik 3 json jq

我有以下 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
         }
      ]
   }
]
Run Code Online (Sandbox Code Playgroud)

我想将端口提取到简单的csv输出

80,53
Run Code Online (Sandbox Code Playgroud)

我试过

jq -r '.[]."ports" | map(.port) | @csv' 105.105.105.105_tcp.json
Run Code Online (Sandbox Code Playgroud)

jq -r '.[]."ports" | map(.port) | join(",")' 105.105.105.105_tcp.json
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用。

Hax*_*iel 5

这是一个仅限 jq 的解决方案:

jq -r '[ .[].ports[].port ]|@csv' network.json
80,53
Run Code Online (Sandbox Code Playgroud)

这里的方法是检索端口号,将它们包装成一个数组,然后将其转换为 CSV 格式。