MySQL JSON_OBJECT不保留值的顺序?

yh2wf1be  于 2023-08-08  发布在  Mysql
关注(0)|答案(2)|浏览(272)

下面的查询返回一个json对象。我希望formatted_criteria的json对象按照我在查询中定义的顺序返回值,即首先是Location,然后是Radius
但是,返回的结果只是保持原始criteria列的顺序。

select a.id
      , a.name
      , a.criteria
      , JSON_OBJECT(
         'Location', JSON_UNQUOTE(JSON_EXTRACT(a.criteria, '$.location')),
         'Radius', CONCAT(JSON_UNQUOTE(JSON_EXTRACT(a.criteria, '$.radius')), ' miles')
        ) as formatted_criteria
 from alerts as a

字符串
结果如下:

id |   name   |               criteria                      |        formatted_criteria 
 --------------------------------------------------------------------------------------------------------------
 9 |   test   | {"radius": "30", "location": "Manchester"}  | {"Radius": "30 miles", "Location": "Manchester"}


正如你所看到的,formatted_criteria已经重新排序了值。
我怎样才能让它按照我想要的顺序返回结果。

a64a0gku

a64a0gku1#

我知道这个问题很久以前就有人问过,但我自己也遇到过很多次。我发现使用JSON_OBJECT对结果JSON对象进行排序的唯一方法非常简单:* 不要使用它 * 我只是使用CONCAT、GROUP_CONCAT和所需的引号/分隔符来构造所需的JSON,以实现所需的结果。
完成此操作所需的一次性工作(每个场景)与您按照所需方式排序密钥/对所看到的价值相称。如果它不是那么重要,JSON_OBJECT会产生有效的json,因为标准json不会以任何方式识别元素的顺序。希望这对你有帮助。

cgyqldqp

cgyqldqp2#

我用来对结果进行排序的一种方法是在键中添加空格。结果按从最短到最长的键排序。

JSON_OBJECT(
     'Location', JSON_UNQUOTE(JSON_EXTRACT(a.criteria, '$.location')),
     'Radius   ', CONCAT(JSON_UNQUOTE(JSON_EXTRACT(a.criteria, '$.radius')), ' miles')
    )

字符串

相关问题