You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何整合jq命令将ThreatFox的full_ip-port.json转为完整CSV

将ThreatFox的IP:Port JSON数据导出为包含ID的规范CSV

我需要把一个大型JSON文件(压缩包内的full_ip-port.json)导出为CSV格式。该JSON是结构规整的单个对象,以下是用[to_entries[0,1]] | from_entries提取的代表性片段:

{
  "1122595": [
    {
      "ioc_value": "103.100.159.212:443",
      "ioc_type": "ip:port",
      "threat_type": "botnet_cc",
      "malware": "win.cobalt_strike",
      "malware_alias": "Agentemis,BEACON,CobaltStrike,cobeacon",
      "malware_printable": "Cobalt Strike",
      "first_seen_utc": "2023-05-27 02:31:39",
      "last_seen_utc": null,
      "confidence_level": 100,
      "reference": null,
      "tags": "CLOUDIE-AS-AP Cloudie Limited,CobaltStrike,cs-watermark-666666",
      "anonymous": "0",
      "reporter": "drb_ra"
    }
  ],
  "1122593": [
    {
      "ioc_value": "167.172.72.193:23",
      "ioc_type": "ip:port",
      "threat_type": "botnet_cc",
      "malware": "elf.bashlite",
      "malware_alias": "gayfgt,Gafgyt,qbot,torlus,lizkebab",
      "malware_printable": "Bashlite",
      "first_seen_utc": "2023-05-27 01:40:04",
      "last_seen_utc": null,
      "confidence_level": 75,
      "reference": "https://bazaar.abuse.ch/sample/6c901ba15327da68159712a9726807fb08868309726c55ef202818bfde22a5a7/",
      "tags": "Gafgyt",
      "anonymous": "0",
      "reporter": "abuse_ch"
    }
  ]
}

我已经写了两段jq命令,分别用来获取数据内容和外层ID:

  • 获取内容的命令:
    jq -r '.[] | .[] | to_entries | map(.value) | @csv' full_ip-port.json
    
  • 获取ID的命令:
    jq -r '{id: (. | keys[])} | to_entries | map(.value) | @csv' full_ip-port.json
    

现在需要把这两部分整合,生成一份字段顺序一致、包含ID的规范CSV。


解决方案:整合的jq命令

直接用一段jq命令完成ID与数据的合并,同时输出规范的表头和数据行:

jq -r '
# 提取原数据的所有字段名
(to_entries[0].value[0] | keys) as $original_fields
# 组合完整字段列表(新增id字段)
| ["id"] + $original_fields as $all_fields
# 输出CSV表头
| $all_fields | @csv
# 遍历每个键值对,将ID与对应数据合并后输出
| to_entries[]
| .key as $id
| .value[]
| [$id] + [.[$original_fields[]]]
| @csv
' full_ip-port.json

命令说明

  1. 表头处理:从第一个数据条目中提取原有字段名,加上新增的id字段,生成完整的CSV表头,确保后续数据行的字段顺序与表头完全匹配。
  2. 数据合并:遍历JSON的每个外层键(即ID),将ID作为单独字段,与对应数组内的对象数据合并,按表头顺序提取所有值后转为CSV格式。
  3. 空值处理:jq的@csv会自动将null值转为空字符串,符合CSV规范。

这样处理后,就能直接得到包含ID、字段顺序统一的规范CSV文件,无需分开处理再手动合并,避免了数据对应错误的风险。

内容的提问来源于stack exchange,提问作者user3022917

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:35:03