如何从 Redshift 中的 .json 数组字段中提取键、值项?

问题描述 投票:0回答:1

我有一个名为

expenses
的 Redshift 表,其中包含一个名为
priceitems
的字段。该字段具有字符变化的数据类型,并采用类似于 .json 数组列表中的值,如下所示:

[{"id":27,"amount":6.50,"explainer":null,"quantity":1.00000000,"quantityunit":0,"total":6.50,"billable":false,"name":"Catering","taxable":false,"servicecost_servicecostid":38038}]

我正在尝试选择金额键值对。

我试试这个:

SELECT 
  json_extract_path(
    json_extract_array_element_text(priceitems::json, 0),
    'amount'
  ) 
FROM 
    expenses

但是我收到错误:

类型“json”不存在 [ErrorId: 1-660bdd25-14ff56ae10342e777927c54d]

我也尝试过:

 SELECT 
  json_extract_path_text(priceitems, 'amount')
FROM 
    expenses
where operatorid = 179 and flightid = 632432

我收到错误:JSON 解析错误详细信息:---------------------------------------- --------错误:JSON解析错误代码:8001上下文:无效的json对象[{“id”:25,“amount”:495.64,“explainer”:null,“quantity”:1.00000000,“quantityunit” :0,"total":495.64,"bilable":false,"name":"Renaissance","taxable":false,"servicecost_servicecostid":38030}] 查询: 70157519 位置: funcs_json.hpp:134 进程: query0_126_70157519 [ pid=32430] ---------------------------------------------------------- - [错误ID:1-660bdef5-097bfa366a83b09e2ea78c31]

sql amazon-redshift
1个回答
0
投票

莱克斯说的话。 Redshift 上没有数据类型“json”(有 super,但在本例中没有发挥作用。json_extract_path() 和 json_extract_array_element_text() 都对格式正确的 json 字符串的文本字符串进行操作。您不需要进行转换案例。

SELECT 
  json_extract_path(
    json_extract_array_element_text(priceitems, 0),
    'amount'
  ) 
FROM 
    expenses

如果您想将整个数组取消嵌套到 Redshift 上的数据行中,您将需要使用 json_parse() 将 json 文本转换为超级类型。取消嵌套示例位于 https://docs.aws.amazon.com/redshift/latest/dg/query-super.html#unnest

© www.soinside.com 2019 - 2024. All rights reserved.