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

Hive SQL从多元素JSON数组提取key_1对应值的方法

解决JSON数组中提取key_1取值的问题

问题原因

你遇到的null返回值,是因为目标列存储的是JSON数组(多个对象包裹在[]中),而get_json_object、json_tuple默认针对单个JSON对象解析,直接使用会因路径不匹配返回空值。

适用函数及解决方案

以下以Hive SQL为例,提供两种常用解决方法:

方法1:解析数组并展开提取所有key_1值

先将整列数据解析为JSON数组,再拆分数组中的每个对象,最后提取key_1:

SELECT 
    json_extract_scalar(obj, '$.key_1') AS key_1_value
FROM 
    your_table
LATERAL VIEW 
    json_array(json_column) exploded_table AS obj;
  • json_array(json_column):把字符串格式的JSON数组转为SQL可识别的数组结构
  • lateral view ... AS obj:将数组中的每个JSON对象拆成独立行,每行对应一个obj
  • json_extract_scalar(obj, '$.key_1'):从单个JSON对象中提取key_1的布尔值并转为标量输出

方法2:指定数组索引提取特定位置的key_1值

如果只需要数组中某固定位置的key_1(比如第一个元素),可以直接定位索引路径:

SELECT 
    get_json_object(json_column, '$[0].key_1') AS first_key_1_value,
    get_json_object(json_column, '$[1].key_1') AS second_key_1_value
FROM 
    your_table;
  • $[n].key_1:n为数组索引(从0开始),直接指向数组中第n个对象的key_1字段

注意事项

  • 确保SQL引擎支持JSON数组解析(Hive 2.3+、Spark SQL等原生支持)
  • 若存在格式不规范的JSON,可先过滤无效数据:
SELECT 
    json_extract_scalar(obj, '$.key_1') AS key_1_value
FROM 
    your_table
WHERE 
    json_valid(json_column) = true
LATERAL VIEW 
    json_array(json_column) exploded_table AS obj;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:55:17