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

Databricks SQL中JSONPath通配符匹配cpe_match结果缺失问题

Databricks SQL中JSONPath匹配所有cpe_match节点的问题分析与解决

问题原因

你遇到的结果差异来自两处操作错误:

  1. 错误调用to_json()函数
    若nodes字段本身是可解析的JSON类型(比如Databricks中的ARRAY<STRUCT>、STRUCT,或已通过from_json解析的JSON字符串),to_json(nodes)会将其转换为JSON格式的字符串。此时用:[]语法访问,相当于对文本字符串而非JSON对象执行查询,自然无法正确提取目标节点。

  2. JSONPath表达式未覆盖嵌套层级
    你提到的标准JSONPath$.[*].cpe_match仅能匹配顶层数组元素的cpe_match节点(即示例中的空数组),无法获取children嵌套层级里的cpe_match。你说能找到3个匹配项,实际是使用了递归表达式$..cpe_match(双点表示递归遍历所有层级),而你在Databricks SQL中写的:[*].cpe_match仅处理了顶层节点,未递归查找子层级。

解决方法

1. 移除不必要的to_json()

直接使用原始的nodes字段(若nodes是存储的JSON字符串,需先通过from_json解析为JSON类型)。

2. 使用递归JSONPath表达式

要匹配所有层级的cpe_match节点,在Databricks SQL中使用..递归操作符:

修正后的查询:

select nodes:..cpe_match
from cve_raw

优化:提取非空的cpe_match对象

如果只需要非空的cpe_match内容,可以结合flatten和filter处理结果:

select filter(flatten(nodes:..cpe_match), x -> size(x) > 0)
from cve_raw

针对你的示例JSON,这个查询会返回包含两个有效cpe_match对象的数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:47:10