我想得到JSON格式的结果,下面是objectobj的结构
UUID string
MobileCountryCode string
UserState []struct {
Mobile int64
IsNewUser bool
}
当我通过Redash从Athena中简单选择对象时:
select obj FROM table_name
获取此格式的输出:
{uuid=UCLPKJWPZXH,mobile_country_code=,user_state=[{mobile=9988998899, is_new_user=false}]}
我们可以清楚地看到,输出中的json键不包含双引号,而是用=代替:以限定正确的json
我甚至试着把它投给json:
select CAST(obj AS JSON) AS json_obj FROM table_name
但是我只得到没有json键的值,如下所示:
["UCLPKJWPZXH","",[["9988998899",false]]]
但我希望它是这样的与json键
{"uuid":"UCLPKJWPZXH","mobile_country_code":"","user_state":[{"mobile":9988998899,"is_new_user":false}]}
1条答案
按热度按时间v6ylcynt1#
Athena基于Presto/Trino(引擎v3应使用Trino函数),在Trino中
cast(... as json)
应工作:输出:
尝试升级到v3引擎。如果您已经在使用v3引擎,或者升级后它不工作,或者您无法升级-唯一的方法是将
ROW
转换为MAP
,因为Presto将ROW
视为数组(docs):当从ROW转换为JSON时,结果是JSON数组而不是JSON对象,这是因为在SQL中位置比行的名称更重要。
将行转换为Map可能非常麻烦:
输出: