我从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()
函数创建的结构。
我该怎么办?
答案 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`,
...