使用JQ解析NDPI输出JSON:匹配flow_risk动态键值的方法
匹配NDPI JSON中flow_risk动态键的JQ写法
针对NDPI输出的JSON里flow_risk字段下动态键(范围01-50)的匹配需求,这里提供几种实用的JQ写法:
1. 遍历所有键并筛选范围(键为字符串类型)
如果flow_risk下的键是带前导零的字符串(比如"01"、"35"),用正则匹配范围:
.flow_risk | to_entries[] | select(.key | test("^0?([1-9]|[1-4][0-9]|50)$")) | .value | {risk, severity}
to_entries[]:将对象转换为键值对数组,方便遍历每个键select(...):筛选键符合01-50范围的条目(正则兼容带前导零的"01"和不带的"1").value | {risk, severity}:提取匹配条目中的risk和severity字段
2. 基于数值范围筛选(键为数字类型)
如果flow_risk下的键是纯数字(比如1、35),直接通过数值比较筛选:
.flow_risk | to_entries[] | select(.key | tonumber >= 1 and tonumber <= 50) | .value | {risk, severity}
tonumber:将键转换为数字类型,方便做范围判断- 其余逻辑和第一种方法一致
3. 将结果整理为数组
如果需要把所有匹配的结果整合到一个数组中,在表达式外层加[]即可:
[.flow_risk | to_entries[] | select(.key | tonumber >= 1 and tonumber <= 50) | .value | {risk, severity}]
4. 保留原键结构的写法
如果想保留原键(比如"35")和对应的risk、severity,用with_entries处理:
.flow_risk | with_entries(select(.key | tonumber >=1 and tonumber <=50) | .value |= {risk, severity})
内容的提问来源于stack exchange,提问作者AJM.MARTINEZ
相关产品推荐
相关产品推荐

