Entwickler-Ecke
Sonstiges (Delphi) - json String zerlegen für Anfänger
UweK - Mi 11.06.25 09:40
Titel: json String zerlegen für Anfänger
Hallo allerseits,
Ich bekomme von einem Server den json String
Wie kann ich den in ein json Objekt einladen und dann auf die einzelnen Werte zugreifen? Kann mir dafür bitte jemand mal ein Beispiel aufschreiben?
Im Netz gibt es Beispiele mit TJSONObject.Parse, aber die machen über den Offset nur etwas mit den Paaren ab der ersten geschweiften Klammer. An den Einzelwert zu Beginn komme ich damit anscheinend nicht ran.
Im Delphi-Help sieht TJSONArray sinnvoll aus, in Hinblick auf die eckigen Klammern und die Komma-Aufzählung dazwischen. Aber dort gibt es kein Parse.
Vielen Dank für Tipps!
Gruß Uwe
Moderiert von
Th69: Topic aus Delphi Tutorials verschoben am So 15.06.2025 um 10:30
jaenicke - Do 12.06.25 10:06
Ich würde dir sehr superobject ans Herz legen:
https://github.com/hgourvest/superobject
Leider ist dein geposteter Text
kein valides JSON. Das liegt am String OK, dem die Anführungszeichen fehlen. (Bist du sicher, dass das genau so ankommt?)
SuperObject verarbeitet das allerdings, soweit ich mich entsinne, dennoch. Daher sollte das gehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| uses superobject;
var JsonValue: ISuperObject; ArrayValues: TSuperArray; begin JsonValue := SO('[2,0,{"Status":OK},{"Zeit":123.456}]'); ArrayValues := JsonValue.AsArray; ShowMessage(ArrayValues[0].AsString); ShowMessage(ArrayValues[1].AsString); ShowMessage(ArrayValues[2]['Status'].AsString); ShowMessage(ArrayValues[3]['Zeit'].AsDouble.ToString);
ShowMessage(ArrayValues.S[0]); ShowMessage(ArrayValues.S[1]); ShowMessage(ArrayValues[2].S['Status']); ShowMessage(ArrayValues[3].D['Zeit'].ToString); |
Mit den integrierten Möglichkeiten ginge es so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| uses System.JSON;
var JsonArray: TJSONArray; StatusObj, ZeitObj: TJSONObject; begin JsonArray := TJSONObject.ParseJSONValue('[2, 0, {"Status": OK}, {"Zeit": 123.456}]') as TJSONArray; try ShowMessage(JsonArray.Items[0].AsType<string>); ShowMessage(JsonArray.Items[1].AsType<string>); StatusObj := JsonArray.Items[2] as TJSONObject; ShowMessage(StatusObj.GetValue<string>('Status')); ZeitObj := JsonArray.Items[3] as TJSONObject; ShowMessage(ZeitObj.GetValue<Double>('Zeit').ToString); finally JsonArray.Free; end; |
Aber das dürfte nicht gehen, weil das JSON nicht valide ist.
Es gibt auch noch:
https://github.com/onryldz/x-superobject/blob/master/XSuperObject.pas
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!