2016-12-21 3 views
1

Я возвращаю строку JSON из запроса MySQL 5.7 в ColdFusion 9.0.1. Вот мой запрос:Ошибка DeserializeJSON() MySQL json_object

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": "[email protected]"} 

Но как только я пытаюсь использовать DeserializeJSON() на него я получаю следующее сообщение об ошибке:

JSON parsing failure at character 44:',' in {"nrtype": "Phone 1", "number": "12345678"},{"nrtype": "E-Mail 1", "number": "[email protected]"} 

Я немного смущен. Я хочу получить структуру, созданную функцией DeserializeJSON().

Что я могу сделать?

ответ

7

Это недействительно JSON, как описывает синтаксический анализатор. Если вы закроете этот JSON в квадратных скобках '[' и ']', он будет действительным (или, по крайней мере, разборным). Они сделают это массив структур. Не знаете, как заставить MySQL возвращать данные в этих скобках?

Я думаю, вы могли бы добавить скобки, используя ColdFusion, но я бы предпочел, чтобы источник делал это правильно.

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

Я создал пример с вашими данными, которые вы можете увидеть здесь - trycf.com gist

Из комментариев

Решение действительно было [добавить следующее заявление SQL]:

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

Да, спасибо большое. И thx для квалификации моего поста: D. Решение действительно было: CONTACT ('[', GROUP_CONCAT (JSON_OBJECT (...)), ']') –

+2

Прохладный, это вам помогло. И я рад, что вы нашли способ добавить скобки в инструкции SQL вместо сервера ColdFusion. Я добавлю ваш комментарий к ответу, чтобы другие, увидев это сообщение, увидят его. Отлично сработано. –

-1

Если у вас есть столбцы с некоторыми уже содержащими формат JSON String, попробуйте следующее: 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`, 
... 
+0

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/16808712) –

+0

как это @ kurt-van-den-branden? – Meloman

Смежные вопросы