问题描述
以下雪花查询返回JSON结构,但输出按键排序。如何不按键排序却保留顺序?是否需要设置任何参数设置?
select
object_construct
(
'entity','XYZ','allowed','Yes','currency','USD','statement_month','July,2020'
)
输出:-按键排序
{
"allowed": "Yes","currency": "USD","entity": "XYZ","statement_month": "July,2020"
}
预期输出:-与指定顺序相同
{
"entity": "XYZ","allowed": "Yes",2020"
}
解决方法
JSON是名称和值的无序集合。无法使用JSON保证订单。
构造的对象不一定保留键-值对的原始顺序。
您可以按照以下方式进行操作
SELECT mytable:entity::string as entity,mytable:allowed::string as allowed,mytable:currency::string as currency,mytable:statement_month::string as statement_month
from
(select
object_construct
(
'entity','XYZ','allowed','Yes','currency','USD','statement_month','July,2020'
) mytable);
,
不幸的是,没有
使用说明: https://docs.snowflake.com/en/sql-reference/functions/object_construct.html#usage-notes
构造的对象不一定保留键-值对的原始顺序。
与PARSE_JSON用法说明相同: https://docs.snowflake.com/en/sql-reference/functions/parse_json.html#usage-notes
由TO_JSON生成的字符串中的键值对的顺序是不可预测的。