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

使用jq提取JSON中ActionId而非Status=OK遇下划线字段问题

解决jq提取嵌套字段ActionId的问题

没问题,我来帮你搞定这个jq提取的问题!你之前的命令没成功,主要是没处理JSON的数组结构,还有字段的层级关系没弄对——下划线开头的字段在jq里用点语法完全没问题,不用特殊处理哦。

先看你的目标JSON数据:

[ { "_index": "filebeat-7.2.0-2020.09.06-000060", "_type": "_doc", "_version": 1, "_score": null, "_source": { "@timestamp": "2020-09-09T11:34:21.192Z", "ActionName": "Service", "ConnectionId": "53NCBP", "Method": "POST", "ActionId": "ecdc38f369e3", "stream": "stdout", "RequestId": "0HM2D6Q53NC1", "Status": "OK", "@t": "2020-09-09T11:34:21.1926712Z", "input": { "type": "docker" }, "IP": "1.1.1.1" }, "fields": { "@timestamp": [ "2020-09-09T11:34:21.192Z" ], "s.timestamp": [ "2020-09-09T11:34:21.192Z" ] }, "sort": [ 1599651261192 ] } ]

提取单个ActionId(如果数组只有一个元素)

用这个命令就能直接拿到目标值:

jq '.[0]._source.ActionId' your_file.json

输出结果会是:"ecdc38f369e3"

提取数组中所有元素的ActionId

如果你的JSON数组里有多个对象,想要批量提取,就用:

jq '.[]._source.ActionId' your_file.json

这样会遍历数组里的每一个对象,输出每个对象的ActionId值。

顺便纠正你之前的命令问题

你之前用的jq '_source,.Status'之所以不对,是因为:

  • 你的JSON最外层是数组,得先通过.[0]或者.[].访问到数组里的对象,直接写_sourcejq找不到这个字段
  • Status是嵌套在_source里面的,不是和_source同级的字段,所以正确的写法应该是_source.Status

如果想同时提取ActionId和Status这两个字段,可以用这个命令:

jq '.[]._source | {ActionId, Status}' your_file.json

输出会是:

{
  "ActionId": "ecdc38f369e3",
  "Status": "OK"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:02:35