FHEM Forum

FHEM => Frontends => Thema gestartet von: qubit am 09 Juni 2017, 20:55:55

Titel: [gelöst] Javascript:Wie parst man die JSONList2 Ausgabe mit Unicode Sequ. \u0022
Beitrag von: qubit am 09 Juni 2017, 20:55:55
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:

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.

Titel: Antw:Javascript:Wie parst man die JSONList2 Ausgabe mit Unicode Escape Sequenz \u0022
Beitrag von: rudolfkoenig am 11 Juni 2017, 18:45:54
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.
Titel: Antw:Javascript:Wie parst man die JSONList2 Ausgabe mit Unicode Escape Sequenz \u0022
Beitrag von: qubit am 15 Juni 2017, 19:44:37
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