Beckhoff Jason 2d Array auslesen

ehcsub

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag zusammen,

ich habe folgendes Problem. ich möchte gerne Werte aus einer JASON Datei auslesen:

Code:
{
  "variable1": 3.14,
  "variable2": "Beispieltext",
  "variable3": 2.718,
  "variable4": "Noch ein Text",
  "variable5": 1.618,
  "array":
  [
  [1, 2],[3, 4],[5, 6], [7, 8],[9, 10],[11, 12],[13, 14],[15, 16],[17, 18],[19, 20], [17, 18],[19, 20]
  ],
    "array2": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
}

Das funktioniert soweit auch gut, bis auf die Werte "array".
Hier einmal der Code:
Code:
IF bParseJason THEN
    
       i                 := 1;
      jsonProp         := fbJson.FindMember(jsonRoot, 'array');   
       jsonIterator     := fbJson.ArrayBegin(jsonProp);
    arraySize        := fbJson.GetArraySize(jsonProp);
    
    WHILE i <= 20 DO
        
        array1[i, 1]     := fbJson.GetInt(jsonIterator);
        jsonIterator     := fbJson.NextArray(jsonIterator);
        
        
        array1[i, 2] := fbJson.GetInt(jsonIterator);
        jsonIterator := fbJson.NextArray(jsonIterator);
        
        
        i := i + 1;
    END_WHILE
    bParseJason := FALSE;
END_IF

Dabei erhalte ich folgendes Ergebnis.

Untitled.png

Vielleicht hat jemand eine Idee oder einen Lösungsansatz.

Danke und Gruß
Ehcsub
 
Sind die weiteren Inhalte deines JSON-Files variabel?
Falls das File immer gleich ausschaut, könntest du dir die Mühe die Einträge einzeln, bzw. iteriert zu lesen sparen, und einfach mit nur 1 Zugriff das gesamte JSON-File in eine strukturell identisch aufgebaute TwinCAT Strukturvariable parsen lassen. Mache das so um bspw. Maschine-Parameter zu sichern / zu laden.
 
Ja, kann dir gerne ein Beispiel senden, muss es aber aus einer meiner Libraries raus kopieren.

Fahre am Sonntag jedoch für eine knappe Woche in die Ferien... Würde es dir übernächste Woche auch noch reichen?

Falls du sofort was brauchst, könnte ich dir kurzfristig eine (eigene) Bibliothek dazu geben (Dokumentiert).
In der Bibliothek sind auch FB für komplexere Aufgabenstellungen, wie z.B. eine sehr einfach implementierbare
JSON-basierte Rezepturverwaltung, welche mit beliebigen HMI funktioniert.
 

Anhänge

Zuviel Werbung?
-> Hier kostenlos registrieren
Bin in den Ferien :)

Zum Rauskopieren der Daten müsste ich in XAE, was ich jetzt nicht kann. Nächste Woche bin ich wieder im Büro.

Hier aber mal die erwähnte Library, mit FB_JsonDeviceDataManager kannst du es kurz ohne Aufwand ausprobieren. Am besten damit erstmal speichern lassen, damit du die genaue Json-File-Struktur siehst.


Wenn es klappt, kannst du natürlich auch einfach die Library einsetzen (ist nicht Steuerungs-Lizenziert, also beliebig of nutzbar), dann sparst du dir den Eigenaufwand.
 
Dann eine erholsame Zeit!

Mit deinem Input habe ich mein Vorgehen geändert. Ich parse die Jason jetzt nicht mehr durch, sondern kopiere die kompletten Daten in eine Strucktur. Das ist für meine Anwendung volkommen ausreichend.

Code:
IF bLoadJsonFile THEN
    
    fbJson.LoadDocumentFromFile('C:\Dateipfad\zuLesendeDatei.json', bLoadJsonFile);   
    jsonRoot := fbJson.GetDocumentRoot();
    someJasonLenght := fbJson.CopyDocument(someJson, SIZEOF(someJson));
    
END_IF

IF runOnce THEN
    fbJsonDataType.SetSymbolFromJson(someJson, 'ValuesToReceive', SIZEOF(stValuesToReceive), ADR(stValuesToReceive));
    runOnce := FALSE;
END_IF

Link zur Beckhoff Doku


Danke nochmal für deinen Input!
Gruß
Ehcsub
 
Zurück
Oben