[英]How to parse retrieve value from a json string field in Redshift/SQL
我有一排看起來像這樣:
編號 | json_list | 預期結果
"1" | [{"id":"1", "text":"text1"},{"id":"3", "text":"text3"}] | “文本1”
"2" | [{"id":"2", "text":"text2"},{"id":"3", "text":"text3"}] | “文本2”
我想根據 id 列檢索“文本”字段。 如何在 AWS Redshift 中實現這一目標? 我知道 Redshift 有一些 json 功能,它需要與某種循環條件配對,但我不確定它是否可能在 SQL
請讓我知道,如果我是否正確理解了您的問題。 因為數據有點混亂。
Id 列值 - 2 您的 Json 值 - [{"id":"1", "text":"text1"},{"id":"3", "text":"text3"}]
預期結果 - text1
解決方案->
第 1 步- 遍歷各種 JSON 元素
select json_extract_array_element_text('[{"id":"1", "text":"text1"},{"id":"3", "text":"text3"}]',1)
第 2 步- 解析特定 JSON 元素中的鍵、值對
select json_extract_path_text(json_extract_array_element_text('[{"id":"1", "text":"text1"},{"id":"3", "text":"text3"}]',1),'text')
所以,假設我有一張桌子 -
create table dev.gp_test1_20200731
(
id int,
json_list varchar(1000),
expected_result varchar(100)
)
插入數據 -
insert into dev.gp_test1_20200731
values
(1,'[{"id":"1", "text":"text1"},{"id":"3", "text":"text3"}]', 'text1'),
(2,'[{"id":"2", "text":"text2"},{"id":"3", "text":"text3"}]', 'text2')
數據如何 -
這就是查詢的方式 -
select json_extract_path_text(json_extract_array_element_text(json_list,1),'text')
from dev.gp_test1_20200731
where id = 2
結果 -
但是,將 JSON 存儲在 Redshift 中並不是一個好習慣。
關於原因的文檔 - 鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.