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

如何用JQ提取JSON嵌套数组数据?解决索引报错问题

解决jq提取嵌套数组字段的报错问题

嘿,我来帮你搞定这个jq的问题~你遇到的错误是因为命令里的数组操作顺序搞错了,让我给你拆解一下原因和正确的写法:

错误原因分析

你之前的命令里,[.name]把单个的name值包装成了数组,接下来再调用.indicators[]的时候,是在这个数组对象上找indicators字段——但数组本身根本没有这个属性,所以就抛出了Cannot index array with string "indicators"的错误。

正确的jq命令

你需要先保留每个result的name,然后遍历它内部的indicators数组,把name和每个indicator的type、indicator字段组合成一行CSV。正确的命令应该是这样:

jq -r '.results[] | .name as $name | .indicators[] | [$name, .type, .indicator] | @csv' \
< /home/threat-intel/ThreatIntel/AV.json \
>> /home/threat-intel/ThreatIntel/AV.csv

命令细节说明

  • .results[]:遍历主数组里的每个result对象
  • .name as $name:把当前result的name值存到变量$name里,方便后续在遍历indicators时引用
  • .indicators[]:遍历当前result下的indicators数组里的每个元素
  • [$name, .type, .indicator]:把之前存的name和当前indicator的type、indicator字段组合成一个数组
  • @csv:把数组转换成标准CSV格式的字符串,-r参数用来输出原始字符串(避免JSON格式的引号包裹)

示例验证

假设你的JSON结构大概是这样:

{
  "results": [
    {
      "name": "MalwareX",
      "indicators": [
        {"type": "ip", "indicator": "192.168.1.100"},
        {"type": "hash", "indicator": "abc123def456"}
      ]
    },
    {
      "name": "RansomwareY",
      "indicators": [
        {"type": "domain", "indicator": "bad.example.com"}
      ]
    }
  ]
}

运行正确命令后,输出的CSV内容会是:

"MalwareX","ip","192.168.1.100"
"MalwareX","hash","abc123def456"
"RansomwareY","domain","bad.example.com"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:44:08