如何用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
相关产品推荐
相关产品推荐

