错误DeserializeJSON()MySQL json_object

时间:2016-12-21 15:38:31

标签: mysql json coldfusion coldfusion-9

我从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()函数创建的结构。

我该怎么办?

2 个答案:

答案 0 :(得分:7)

这是解析器描述的无效JSON。如果你将JSON包装在方括号内,那么['和']'它是有效的(或至少是可解析的)。他们将使它成为一系列结构。不确定如何让MySQL返回这些括号内的数据?

我想你可以使用ColdFusion添加括号,但我希望源能够正确地进行。

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

我使用您在此处可以看到的数据创建了一个示例 - trycf.com gist

来自评论

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

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

答案 1 :(得分:-1)

如果您的列中包含一些已包含JSON格式的字符串,请尝试以下操作:https://stackoverflow.com/a/45278722/2282880

JSON_MERGE()的部分代码:

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