MySQL JSON_OBJECT是否保留值的顺序?

时间:2019-03-10 16:26:53

标签: sql json mysql-5.7

我有以下查询返回json对象。我希望const MyComponent = styled.div` margin-top: ${props => props.marginTop || 'initial'} ` <MyComponent marginTop = '20px' /> 的json对象返回我在查询中定义的顺序的值,即首先返回formatted_criteria,然后返回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

您可以看到formatted_criteria对值进行了重新排序吗?

如何获取它以想要的顺序返回结果。

1 个答案:

答案 0 :(得分:0)

我知道这个问题是很久以前提出的,但我本人曾多次遇到过这种情况。我发现使用JSON_OBJECT排序生成的JSON对象的唯一方法非常简单:不使用。我只需使用CONCAT,GROUP_CONCAT和所需的引号/分隔符构造所需的JSON,即可获得所需的结果。

执行此操作(在每种情况下)的一次性工作与您按所需的方式对密钥/对进行排序所看到的价值相称。如果不是那么重要,则JSON_OBJECT会生成有效的json,因为标准json不会以任何方式识别元素的顺序。希望这会有所帮助。