错误 DeserializeJSON() MySQL json_object

Error DeserializeJSON() MySQL json_object

我正在从 ColdFusion 9.0.1 中的 MySQL 5.7 查询中取回 JSON 字符串。这是我的查询:

SELECT  (
        SELECT  GROUP_CONCAT(
                  JSON_OBJECT(
                    'nrtype', nrt.nrtype,
                    'number', nr.number
                    )
                )
        ) AS nrJSON
FROM    ...

返回的数据如下所示:

{"nrtype": "Phone 1", "number": "12345678"},{"nrtype": "E-Mail 1", "number": "some@email.com"}

但是当我尝试在其上使用 DeserializeJSON() 时,我收到以下错误:

JSON parsing failure at character 44:',' in {"nrtype": "Phone 1", "number": "12345678"},{"nrtype": "E-Mail 1", "number": "some@email.com"}

我有点困惑。我想要得到的是由 DeserializeJSON() 函数创建的结构。

我能做什么?

正如解析器所描述的那样,JSON 那是无效的。如果将 JSON 包裹在方括号“[”和“]”中,它将是有效的(或至少是可解析的)。他们将使它成为一个结构数组。不确定如何制作 MySQL return 这些括号内的数据?

我猜你可以使用 ColdFusion 添加括号,但我更希望源代码正确地完成它。

jsonhack = '[' & queryname.nrJSON & ']';
datarecord = DeserializeJSON(jsonhack);
writeDump(datarecord);

我用你的数据创建了一个例子,你可以在这里看到 - trycf.com gist

来自评论

解决方案确实是[将以下内容添加到 SQL 语句]:

CONTACT('[', 
    GROUP_CONCAT(
        JSON_OBJECT(...)
    ),
']')

如果您有一些列已经包含 JSON 格式字符串,请尝试以下操作:

带有 JSON_MERGE() 的代码部分:

...
CONCAT(
    '{"elements": [',
    GROUP_CONCAT(
        JSON_MERGE(
            JSON_OBJECT(
                'type',  T2.`type`,
                'data',  T2.`data`
            ),
            CONCAT('{"info": ',  T2.`info`, '}')
        )
    ),
    ']}'
) AS `elements`,
...