Autor Thema: [gelöst] Javascript:Wie parst man die JSONList2 Ausgabe mit Unicode Sequ. \u0022  (Gelesen 280 mal)

Offline qubit

  • New Member
  • *
  • Beiträge: 4
Hallo,

in einer Javascript Anwendung möchte die JSONList2 Ausgabe mit JSON.parse() deserialisieren. JSONList2 enthält Unicode Escape Sequenzen, u.a. für  das doppelte Hochkomma "\u0022". Dies wird vom Parser als fehlerhaft erkannt. Es liegt wohl daran, das in JavaScript die Unicode Escape Sequenz (der Unicode code point für das Hochkomma) in einem String als ein gültiges Zeichen betrachtet wird. Es ist also gerade eben nicht geschützt.

Nun die Fragen:
  • Wie lässt sich die JSONList2 Ausgabe in JavaScript korrekt in eine Objekt konvertieren?
  • Müsste nicht ein doppeltes Hochkomma in einem JSON String mit \" maskiert werden, also mit \\u0022 ?

Beispiel:

"Attributes": {
    ...
     "userReadings": "gasDayCnt:state.* difference { ReadingsVal(\u0022D_GAS_CNT_AT_MIDNIGHT\u0022,\u0022state\u0022,0);}"
}

Dies ist in einem JavaScript String identisch zu:

"Attributes": {
    ...
    "userReadings": "gasDayCnt:state.* difference { ReadingsVal("D_GAS_CNT_AT_MIDNIGHT","state",0);}"
}

.. und dies ist kein korrektes JSON. Die Folge ein Syntaxfehler, der vom JSON.parser() (oder anderen Tools und Anwendungen) mit einer Ausnahme quittiert wird. Das Dumme ist, man kann es nicht erkennen oder ersetzen, da '"' === '\u0022' ist.

Für jeden Hinweis und Korrektur meiner Analyse bin ich sehr dankbar.

« Letzte Änderung: 15 Juni 2017, 19:50:31 von qubit »

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 16593
Ich habe erst ein dummy definiert, und Attribut gesetzt:
define d dummy
attr d userReadings gasDayCnt:state.* difference { ReadingsVal("D_GAS_CNT_AT_MIDNIGHT","state",0);;}
und dann in der JavaScript Console von Chrome Folgendes eingegeben:
FW_cmd(FW_root+"?cmd=jsonlist2 d&XHR=1", function(d){ var r=JSON.parse(d); log(r.Results[0].Attributes.userReadings) });
mit dem Ergebnis in der Console:
18:40:23.798 gasDayCnt:state.* difference { ReadingsVal("D_GAS_CNT_AT_MIDNIGHT","state",0);}Im Firefox habe ich das Gleiche bekommen -> ich sehe kein Problem.

Offline qubit

  • New Member
  • *
  • Beiträge: 4
Danke Rudolf,

ich konnte Dein Beispiel nachvollziehen. Danach habe ich auch einen Fehler bei mir gefunden. Die JsonList2 Daten hatte ich mit einer telnet Verbindung beschafft und leider die Zeichenfolge "Bye  ..." beim Schließen der Verbindung mit geparsed. Das konnte nicht klappen. Zusätzlich hat mich verwirrt, das ein nativer Javascript String mit enthaltenen Escape Sequenzen "\u0022" beim Parsen zum Fehler führt.

var s = '{"userReadings": "gasDayCnt:state.* difference { ReadingsVal(\u0022D_GAS_CNT_AT_MIDNIGHT\u0022,\u0022state\u0022,0);}"}';

console.log(s);
{"userReadings": "gasDayCnt:state.* difference { ReadingsVal("D_GAS_CNT_AT_MIDNIGHT","state",0);}"}

var o = JSON.parse(s);
Uncaught SyntaxError: Unexpected token D in JSON at position 62