2

以下雪花查询返回 JSON 结构,但输出按键排序。如何不按键排序但保留顺序?有没有需要设置的参数设置?

select
object_construct
(
  'entity',  'XYZ',
  'allowed',  'Yes',
  'currency', 'USD',
  'statement_month','July, 2020'
 )

输出: --it 按键排序

{
  "allowed": "Yes",
  "currency": "USD",
  "entity": "XYZ",
  "statement_month": "July, 2020"
}

预期输出:--与指定的顺序相同

{
  "entity": "XYZ",
  "allowed": "Yes",
  "currency": "USD",
  "statement_month": "July, 2020"
}
4

2 回答 2

4

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);
于 2020-08-14T08:29:12.220 回答
0

抱歉不行

使用说明: 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 生成的字符串中键值对的顺序是不可预测的

于 2020-08-14T08:27:59.730 回答