在Snowflake SQL中解析JSON数组键/值

问题描述

请问我能否将重复的JSON键/值数组解析为单独的列?我的目标是创建一个记录,其中包含键中的三列。这三个键名在原始JSON中不重复。我可以告诉你吗?

-- create a sample table
create or replace table json_example(v variant);
-- create sample json record
insert into json_example
select parse_json(
    '{"event_params": [{"key": "firebase_prevIoUs_id","value": { "int_value": "6360478777384052472"}},{"key": "firebase_screen_class","value": {"string_value": "Flutter"}},{"key": "firebase_event_origin","value": {"string_value": "auto"}}]}'
);

-- the query I created (not going well)
select
    ep.key.firebase_prevIoUs_id.int_value::varchar as firebase_prevIoUs_id,ep.key.firebase_screen_class.string_value::varchar as firebase_screen_class,ep.key.firebase_event_origin.string_value::varchar as firebase_event_origin
from
    json_example,lateral flatten(input => v,outer => true) ep

解决方法

检查这是否是您想要的,然后可以从value中获取值作为值:

select value from (
select parse_json(
    '{"event_params": [{"key": "firebase_previous_id","value": { "int_value": "6360478777384052472"}},{"key": "firebase_screen_class","value": {"string_value": "Flutter"}},{"key": "firebase_event_origin","value": {"string_value": "auto"}}]}'
)) as src,lateral flatten(input => src.$1:event_params);