下面的查询返回一个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已经重新排序了值。
我怎样才能让它按照我想要的顺序返回结果。
2条答案
按热度按时间a64a0gku1#
我知道这个问题很久以前就有人问过,但我自己也遇到过很多次。我发现使用JSON_OBJECT对结果JSON对象进行排序的唯一方法非常简单:* 不要使用它 * 我只是使用CONCAT、GROUP_CONCAT和所需的引号/分隔符来构造所需的JSON,以实现所需的结果。
完成此操作所需的一次性工作(每个场景)与您按照所需方式排序密钥/对所看到的价值相称。如果它不是那么重要,JSON_OBJECT会产生有效的json,因为标准json不会以任何方式识别元素的顺序。希望这对你有帮助。
cgyqldqp2#
我用来对结果进行排序的一种方法是在键中添加空格。结果按从最短到最长的键排序。
字符串