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

如何使用CloudWatch Logs Insights提取JSON消息中数组内的指定数据

解决方案

不建议用正则直接解析JSON结构,你遇到的匹配冗余内容、无法筛选的问题核心是正则的贪婪匹配特性,且正则无法可靠处理JSON的转义符、嵌套结构、字段顺序变化等场景,优先用对应工具的结构化JSON解析能力实现需求:

1. 若使用Azure Monitor/Kusto查询语言

直接用parse_json解析数组后筛选:

// 先将@message解析为JSON对象
| extend parsed_msg = parse_json(@message)
// 展开arr数组
| mv-expand parsed_msg.arr
// 筛选指定key的条目
| where arr.key == "my_specific_key"
// 提取对应value值
| extend target_value = arr.value
// 可选:仅保留需要的字段
| project target_value, *

2. 若使用ELK Stack(Elasticsearch DSL/ Kibana查询)

先确保日志的JSON结构已经被正确解析映射,再按以下方式操作:

  • Kibana KQL筛选语法:
    arr.key: "my_specific_key"
    
    筛选后可直接在字段栏选择arr.value查看对应值,也可以用Runtime Field自定义提取:
    for (item in doc['arr.key']) {
      if (item == 'my_specific_key') {
        emit(doc['arr.value'][doc['arr.key'].indexOf(item)]);
      }
    }
    

3. 若自行写脚本处理原始JSON数据

以Python为例:

import json

# 加载JSON日志
log_data = json.loads(your_log_message)
target_key = "my_specific_key"
# 遍历数组筛选
for item in log_data.get("arr", []):
    if item.get("key") == target_key:
        target_value = item.get("value")
        # 后续处理逻辑
        print(target_value)

必须用正则的临时救急方案

把贪婪匹配改成非贪婪,同时匹配value的结束边界,仅适用于value不含}字符的简单场景:

parse @message /.*"key":"my_specific_key","value":(?<value>[^}]*)/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:57:03