Presto 中带双引号的 json 处理方式是否不同?

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

使用 Presto SQL,列的原始格式如下所示

"{\"ORDERS (completed)\": 1000.00, \"ORDERS (failed) USD\": 3000.00}"
,我尝试通过解析和转换为映射(varchar,double)然后取消嵌套来提取键和值

UNNEST(
    CAST(JSON_PARSE(json) as MAP<VARCHAR, DOUBLE>)
) x(key, value)

当我使用

json_parse
时,正斜杠和引号消失,但在尝试转换为
map<varchar, double>
时收到错误(预期为 json 对象)
{"ORDERS (filled)": 1000.00, "ORDERS (succeeded) USD": 3000.00}

我也尝试过转换为 json,但收到了类似的错误

"{\"ORDERS (completed) USD\": 1000.0}" "\"{\\\"ORDERS (failed) USD\\\": 3000.0}\""

json presto
1个回答
0
投票

我的问题的解决方案:

cast(json_parse(replace(substr(col, 2, length(col) - 2), '\', '')) as map<varchar, double>)

我们要小心不要删除 json_parse 工作的所有双引号,只需要 json 字符串周围的双引号即可。所以我们使用

substr(col, 2, length(col) - 2)
来获取引号内的字符串。我们需要用 '' 替换正斜杠,以便 json_parse 转换为 json。然后我们可以像往常一样使用 json_parse 并转换为地图

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