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

如何在Presto 0.282中提取JSON数组中的信息?

Presto 0.282 提取JSON数组字段解决方案

首先要指出:你给出的['{month_01=0','date_last_activity=2023-01-01','month_02=0','month_03=0','month_04=0','month_05=0}']并非标准JSON格式,标准JSON要求键名、字符串值必须用双引号包裹,键值对之间用逗号分隔,对象需用完整大括号包裹。正确的标准JSON格式应为:

[{"month_01": 0, "date_last_activity": "2023-01-01", "month_02": 0, "month_03": 0, "month_04": 0, "month_05": 0}]

以下分两种情况给出提取方案:

1. 处理标准JSON数组

提取单个字段

使用json_extract_scalar提取标量值(字符串、数字等),语法为json_extract_scalar(列名, 'JSON路径'):

  • 提取日期字段:
SELECT json_extract_scalar(json_column, '$[0].date_last_activity') AS date_last_activity
FROM your_table;
  • 提取月份数字(需转类型):
SELECT cast(json_extract_scalar(json_column, '$[0].month_01') AS integer) AS month_01
FROM your_table;

解释:$代表整个JSON对象,[0]指向数组第一个元素,.字段名定位目标键值对。

展开数组提取多元素

若数组包含多个对象,用unnest配合json_array_elements展开每行对应一个数组元素:

SELECT 
    json_extract_scalar(element, '$.date_last_activity') AS date_last_activity,
    cast(json_extract_scalar(element, '$.month_01') AS integer) AS month_01,
    cast(json_extract_scalar(element, '$.month_02') AS integer) AS month_02
FROM your_table,
     unnest(json_array_elements(json_column)) AS t(element);

2. 处理非标准JSON格式

如果json_column存储的确实是你给出的非标准格式,先通过字符串替换转为标准JSON再提取:

SELECT 
    json_extract_scalar(standard_json, '$[0].date_last_activity') AS date_last_activity
FROM (
    SELECT 
        replace(
            replace(
                replace(json_column, '=', '":"'),
                '{', '{"'),
            '}', '"}'
        ) AS standard_json
    FROM your_table
) t;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:52:38