DuckDB中JSONPath表达式$.*~的等效写法是什么?
DuckDB中JSONPath表达式
$.*~的等效实现 你需要的$.*~是部分非标准JSONPath实现(如Jayway)中用于提取对象顶层键名的语法,但DuckDB遵循SQL/JSON路径标准,不支持该语法。以下是两种等效实现方式:
方法1:使用SQL/JSONPath标准的keys()函数
直接通过JSONPath的keys()方法获取顶层对象的所有键,返回结果与原需求完全一致:
SELECT j->'$.keys()' FROM example;
执行后返回:
["firstName", "lastName", "age", "address", "phoneNumbers"]
方法2:使用DuckDB内置JSON函数
通过json_each展开JSON对象的键值对,再用json_group_array聚合为键名数组:
SELECT ( SELECT json_group_array(key) FROM json_each(j) ) AS top_level_keys FROM example;
该方法同样会返回包含所有顶层键的数组。
说明
$.*~的核心需求是提取JSON对象的顶层键名集合,上述两种方法都能满足该需求。- 优先选择方法1,因为它更简洁且符合SQL/JSON路径规范,性能也更优。
内容的提问来源于stack exchange,提问作者user3585668
相关产品推荐
相关产品推荐

