2016-12-21 5 views
1

Ich bekomme eine JSON-Zeichenfolge aus einer MySQL 5.7-Abfrage in ColdFusion 9.0.1 zurück. Hier ist meine Frage:Fehler DeserializeJSON() MySQL json_object

{"nrtype": "Phone 1", "number": "12345678"},{"nrtype": "E-Mail 1", "number": "[email protected]"} 

Aber sobald ich versuche DeserializeJSON() auf, es zu benutzen ich die folgende Fehlermeldung erhalten:

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

Die zurückgegebenen Daten wie folgt aussieht

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

Ich bin ein wenig verwirrt. Was ich bekommen möchte, ist eine Struktur, die von der DeserializeJSON()-Funktion erstellt wird.

Was kann ich tun?

Antwort

7

Das ist kein gültiger JSON, wie der Parser beschreibt. Wenn Sie diesen JSON in eckige Klammern '[' und ']' einfügen, wäre er gültig (oder zumindest parsierbar). Sie werden es zu einer Reihe von Strukturen machen. Nicht sicher, wie MySQL die Daten innerhalb dieser Klammern zurückgibt?

Ich denke, Sie könnten die Klammern mit ColdFusion hinzufügen, aber ich würde es vorziehen, die Quelle es richtig zu tun haben.

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

Ich habe ein Beispiel mit Ihren Daten, die Sie hier sehen können - trycf.com gist

Aus den Kommentaren

Die Lösung in der Tat war [die folgenden SQL-Anweisung hinzufügen]:

+1

Richtig, ich danke Ihnen sehr. Und danke für die Qualifizierung meiner Post: D. Die Lösung war in der Tat: KONTAKT ('[', GROUP_CONCAT (JSON_OBJECT (...)), ']') –

+2

Cool froh, dass dir das geholfen hat. Und ich bin froh, dass Sie eine Möglichkeit gefunden haben, die Klammern innerhalb der SQL-Anweisung anstatt vom ColdFusion-Server hinzuzufügen. Ich werde Ihren Kommentar zu der Antwort hinzufügen, damit andere diesen Beitrag sehen können. Gut gemacht. –

-1

Wenn Sie Spalten mit einigen bereits enthalten JSON Format String haben, versuchen Sie dies: https://stackoverflow.com/a/45278722/2282880

Teil des Codes mit JSON_MERGE():

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

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/16808712) –

+0

gefällt das @ kurt-van-den-branden? – Meloman