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

KQL查询访问含点号JSON键名时的点号转义方法

问题根因

KQL 访问动态类型的JSON结构时,点表示法默认将.识别为层级分隔符。当键名本身包含.(比如示例中的2.0、3.0),无论用反斜杠怎么转义点号,点表示法都会把键名拆成多层路径解析,最终匹配不到目标字段。

正确写法

访问带特殊字符的键名不需要在点路径里转义,直接用方括号索引语法,把完整键名作为字符串放在方括号内即可。
原查询中出错的字段提取行:

cvss2Score = tostring(properties.additionalData.cvss.\(2.0).base)

替换为以下写法即可正常取值:

cvss2Score = tostring(properties.additionalData.cvss["2.0"].base)

如果需要同时提取CVSS 3.0的基础分,用相同语法即可:

cvss3Score = tostring(properties.additionalData.cvss["3.0"].base)
修正后可直接运行的完整查询
securityresources 
| where type =~ "microsoft.security/assessments/subassessments"
| extend assessmentKey=extract(@"(?i)providers/Microsoft.Security/assessments/([^/]*)", 1, id), 
        QID=tostring(properties.id), 
        parentResourceId= extract("(.+)/providers/Microsoft.Security", 1, id)
| extend resourceId = tostring(properties.resourceDetails.id)
| where properties.additionalData.assessedResourceType =~ "ServerVulnerability" 
        or properties.additionalData.assessedResourceType =~ "GeneralVulnerability"
| where properties.additionalData.source =~ "Built-in Qualys vulnerability assessment"
| extend vulnerabilityName=tostring(properties.displayName),
        vulnerabilityType = tostring(properties.additionalData.assessedResourceType),
        virtualMachineName=split(properties.resourceDetails.id, "/")[-1],
        cvss2Score = tostring(properties.additionalData.cvss["2.0"].base),
        cvss3Score = tostring(properties.additionalData.cvss["3.0"].base)
| project QID, vulnerabilityName, virtualMachineName, vulnerabilityType, cvss2Score, cvss3Score

提示:所有键名包含空格、斜杠、点号等特殊字符的场景,都可以用方括号传字符串键名的方式访问,兼容性比点表示法更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:45:37