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

GCP日志分析中从JSON字段提取值返回null的问题排查

问题分析与解决方案

核心问题:正则表达式匹配规则错误

你的正则表达式 r'reference:\s*(\d*\.?\d+)' 只能匹配数字和可选小数点的组合,但目标reference的值是UUID格式(包含小写字母、连字符),完全不符合正则的匹配逻辑,所以返回null。

更可靠的解决方案:使用JSON专用函数解析

既然responseContent是JSON结构,推荐用GCP日志分析支持的JSON函数提取,避免正则依赖字符串格式的脆弱性:

正确查询语句

SELECT
  timestamp, severity, resource.type, log_name, text_payload, proto_payload, json_payload,
  -- 解析步骤:1. 取出responseContent的字符串内容;2. 转为JSON数组并取第一个元素;3. 提取reference字段值
  JSON_VALUE(JSON_EXTRACT_ARRAY_ELEMENT(JSON_VALUE(json_payload.proxy_details.responseContent), 0), '$.reference') AS name
FROM
  `my-proj.global._Default._Default` AS logs

简化场景说明

如果json_payload.proxy_details.responseContent本身已经是JSON数组类型(而非字符串),可以简化为:

JSON_VALUE(json_payload.proxy_details.responseContent[0], '$.reference') AS name

正则修正方案(不推荐)

如果一定要用正则,需调整正则匹配UUID格式:

REGEXP_EXTRACT(JSON_VALUE(json_payload.proxy_details.responseContent), r'"reference":"([a-f0-9-]+)"') AS name

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:43:21