BigQuery如何从JSON数组对象中提取toppings键对应的值?
提取JSON数组中指定键对应的值(不解嵌套)
你的字符串列存储的是JSON数组,每个元素是单个键值对的对象,所以直接用$.toppings会返回null——因为根结构是数组,不是包含toppings键的单个对象。
可以不解嵌套实现提取,以下是几种可行方法(以Snowflake为例):
方法1:使用JSON路径过滤
通过JSON路径的条件筛选,定位到数组中包含toppings键的元素,再提取对应值:
SELECT json_extract(parse_json(string_object_column), '$[?(@.toppings)]')[0].toppings::string AS toppings_value FROM your_table;
$[?(@.toppings)]:筛选数组中存在toppings键的所有元素[0]:取筛选结果的第一个元素(你的数据中只有一个匹配项)::string:将JSON值转为字符串类型
方法2:使用数组过滤函数
利用数组过滤和array_first找到目标对象,再提取值:
SELECT array_first(filter(parse_json(string_object_column), x -> object_has_key(x, 'toppings'))):toppings::string AS toppings_value FROM your_table;
filter(...):遍历数组,筛选出包含toppings键的对象array_first:取筛选后的第一个对象:toppings:提取对象中的toppings值
方法3:直接用json_value提取
json_value会自动返回路径匹配的第一个非null值:
SELECT json_value(parse_json(string_object_column), '$[*].toppings') AS toppings_value FROM your_table;
$[*].toppings:遍历数组所有元素,提取每个元素的toppings值,json_value会返回第一个非null的结果
内容的提问来源于stack exchange,提问作者renaudb3
相关产品推荐
相关产品推荐

