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

在Amazon Redshift中用json_extract_path_text提取嵌套JSON公司名称返回null

解决JSON_EXTRACT_PATH_TEXT提取数组内字段返回NULL的问题

你的SQL执行后返回NULL,核心原因是companies是JSON数组类型,而JSON_EXTRACT_PATH_TEXT无法直接跳过数组层级提取嵌套字段,必须先将数组展开为单独的行,再逐个提取每个对象中的name值。

正确的实现方式(以Redshift为例)

方法1:通过生成数组索引展开数组

WITH json_source AS (
    SELECT '{"topics": ["Fintech", "Artificial Intelligence", "Market Research & Consumer Insights"],
     "companies": [{"name": "TKO Group", "idCbiEntity": 1091583}, {"name": "All Elite Wrestling", "idCbiEntity": 1058641},
     {"name": "New Japan Pro Wrestling", "idCbiEntity": 276499}]}'::JSON AS input_json
),
array_positions AS (
    -- 生成数组元素的索引(从0开始)
    SELECT generate_series(0, JSON_ARRAY_LENGTH(input_json->'companies') - 1) AS idx
    FROM json_source
)
SELECT 
    JSON_EXTRACT_PATH_TEXT(input_json, 'companies', idx::VARCHAR, 'name') AS company_name
FROM json_source, array_positions;

方法2:使用UNNEST展开JSON数组(Redshift 1.0.25772及以上版本支持)

SELECT 
    JSON_EXTRACT_PATH_TEXT(company_item, 'name') AS company_name
FROM (
    SELECT UNNEST(JSON_PARSE(input_json->'companies')) AS company_item
    FROM (
        SELECT '{"topics": ["Fintech", "Artificial Intelligence", "Market Research & Consumer Insights"],
         "companies": [{"name": "TKO Group", "idCbiEntity": 1091583}, {"name": "All Elite Wrestling", "idCbiEntity": 1058641},
         {"name": "New Japan Pro Wrestling", "idCbiEntity": 276499}]}'::JSON AS input_json
    ) AS json_data
) AS expanded_companies;

原SQL失效的原因

你之前的写法直接传递'companies'和'name'作为路径参数,但companies对应的是一个数组对象,而非单个JSON对象。JSON_EXTRACT_PATH_TEXT只能按层级访问单个对象的字段,无法自动遍历数组元素,因此返回NULL。

内容的提问来源于stack exchange,提问作者satya prakash Gubbala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:59:52