[gelöst] Nested JSON to Object

  • EDIT #3: Lösung mit geänderter JSON-Struktur hier: Post #4

    Lösung mit Überführung in Objekt hier: Post #7

    Ich hatte hier auf meine JSON-Datei verwiesen.

    Die Umsetzung in mein Projekt soll in Nim erfolgen.

    Ich habe die Struktur der JSON-Datei mal heruntergebrochen auf ein Minimum:

    Die Nim JSON Library bietet die Möglichkeit, die geparsten JSON-Daten in ein Objekt zu überführen.

    Somit habe ich auf obiger Struktur aufbauend meine Datentypen erstellt.

    Hier mal meine Testdatei mit minimalem JSON-Musterdatensatz:

    Grundsätzlich ist die Überführung verschachtelteter Strukturen in ein Objekt möglich: Nim: How to parse nested JSON into objects

    Im dortigen Bsp. sind jedoch alle Daten fix.

    Ich habe jedoch in allen Arrays eine veränderliche Anzahl von Einträgen, deshalb die Nutzung von "openArray". Und hier liegt das Problem. Gleich beim ersten Auftauchen fliegt es mir um die Ohren:

    In einem ersten Versuch hatte ich statt "openArray[string]" mit Sequences gearbeitet. Nur schlägt auch das fehl, weil der JSON-Parser wohl erkennt, wenn Daten in einem Array vorliegen und die Übernahme in eine Sequenz ablehnt. - Fehlermeldung (Compile) war in etwa: "Type is seq[string] but array found".

    Wie komme ich nun am besten aus der Situation raus?

    Momentan fiele mir nur ein: Statt "openArray" mit "array[string,FIXE-ZAHL]" zu arbeiten und alle Einträge in der JSON-Datei entsprechend mit Leerwerten auffüllen.

    Also wenn ihr Ideen habt: Gern her damit.

    EDIT:

    OK, in der Beschreibung zur Funktion to steht es auch

    Zitat

    Known limitations:

    Heterogeneous arrays are not supported.

    Dann muss ich mich wohl doch von Node zu Node hangeln.

    EDIT #2:

    Hmm, ein weiteres Problem

    Mit dem JSON-String aus obigem Code

    Nim
    let 
      obj_json = parseJson(err_json)        # JSON String parsen
    
    echo obj_json["version"].getStr()

    Führt zum Fehler bei der Ausführung:

    Code
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(931) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(847) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(806) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(806) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(815) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(806) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\json.nim(818) parseJson
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\parsejson.nim(526) eat
    C:\Users\BugFix\scoop\apps\nim\1.2.0\lib\pure\parsejson.nim(522) raiseParseErr
    Error: unhandled exception: input(36, 15) Error: ] expected [JsonParsingError]

    Die Zeile, bevor der Error geworfen wird ist: eat(p, tkBracketRi)

    Nach meinem Verständnis ein Fehler: Schließende Klammer nicht gefunden. Aber die Klammerzuordnung ist korrekt im JSON-String.

    Großes :?:

  • Fehlt dir in Zeile 18 deines Json strings nicht ein ","? Wobei das natürlich ein Copy/Paste Fehler sein kann, da du ja sicher mit anderen Daten arbeitest.

    Kann sein, dass ich den Wald vor lauter Bäumen nicht sehe.

    Zeile #18 des JSON ist doch Code-Zeile #43

    43    ],

    44 "error_list": {
    45 "101": [

    Da ist doch ein Komma. Oder wo meinst Du? Gib mal die Codezeile an oder kopiere die Zeile hier rein.

  • OK, ich löse das Problem nun anders. Die Verschachtelung der error_list konnte von der json Funktion nicht geparst werden, ich bekam ein Objekt mit einem leeren Array.

    Somit habe ich das um eine Stufe "entschachtelt" und führe den Error-Code in jedem Error-List Objekt mit.

  • Ich meinte hier:

  • GELÖST

    So, bin nun auf kleinem Umweg zum Ziel (Objekt) gelangt. Wobei ich hier nur die Fehlerinfos in das Objekt lade, die anderen Nodes sind ja direkt abfragbar.

    Code: Console
    102, BatteryErrBla
    @["dev A", "dev B", "dev C"]
    ----------------------------------------
    102, BatteryErrBlub
    @["dev D", "dev E", "dev F"]
    ----------------------------------------
  • BugFix 21. September 2022 um 14:23

    Hat den Titel des Themas von „[offen] Nested JSON to Object“ zu „[gelöst] Nested JSON to Object“ geändert.