![]() |
JSON Wert lesen
Ich versuche vergeblich 3 Werte aus "art" lesen. (Bin nur ein Hobbyprogrammieren)
"id": "829", "status": "1", "changed": "2020-16-28 11:41:26" Ohne diesen Array, komme ich mit JSON klar, sobald es geschachtelt wird kriege ich ständig Fehler. Ich kann den zweiten Array nicht auslesen. Mein JSON String
Code:
{
"js":{ "today":"67", "old":14, "selected_item":1, "data":[ { "nr":"525", "name":"crane", "number":"26", "service_id":"723851235", "logo":"15.png", "art":[ { "id":"829", "shelf":"12", "status":"1", "changed":"2020-16-28 11:41:26" } ], "use_logo":"1" }, { "nr":"528", "name":"poetry", "number":"26", "service_id":"723851235", "logo":"15.png", "art":[ { "id":"829", "shelf":"12", "status":"1", "changed":"2020-16-28 11:41:26" } ], "use_load_balancing":"1" } ] } } Das wäre mein normaler Fall
Code:
So lese ich die Daten aus:
{
"js": [ { "id": "*", "name": "crane", "nr": "528", "service_id": "723851235", "logo": "15.png", "status": "1", "changed": "2020-16-28 11:41:26", "number": 56 }, { "id": "107", "name": "poetry", "nr": "358", "service_id": "6599235", "logo": "395.png", "status": "1", "changed": "2020-16-29 13:17:11", "number": 182 } ] }
Delphi-Quellcode:
Sobald ich in den Unterbereich "art" greifen will, bekomme ich ständig Fehler.
procedure TForm1.Button4Click(Sender: TObject);
var ID : string; Status : string; Changed : string; JSonValue : TJSonValue; JsonArray : TJSONArray; ArrElement : TJSonValue; begin JsonValue := TJsonObject.ParseJSONValue(Memo5.Text) as TJSONObject; JsonValue := (JsonValue as TJSONObject).Get('js').JSONValue; if (JSONValue is TJSONArray) then begin JSONArray := JsonValue as TJSONArray; for ArrElement in JSONArray do begin ID := ArrElement.GetValue<string>('id'); Status := ArrElement.GetValue<string>('status'); Changed := ArrElement.GetValue<string>('changed'); end; end; end; Ich poste hier kein Muster wie ich es versucht habe, weil es sehr viel Versuche waren. :) Kann mir Jemand unter die Arme greifen? Wäre supi. |
AW: JSON Wert lesen
Welche Art denn? Sowohl data als auch art sind jeweils JSON-Arrays mit 0 bis X Elementen, demzufolge kann es auch 0 bis X Arten geben.
[edit] Hilft Dir das hier weiter? Nur schnell heruntergeschludert, normalerweise würde ich das auf mehrere Parsing-Methoden herunterbrechen.
Delphi-Quellcode:
[/edit]
procedure TForm2.Button1Click(Sender: TObject);
var lJSON: TJSONObject; lInnerJSON: TJSONObject; Arr: TJSONArray; lInnerArr: TJSONArray; lArt: TJSONObject; Value: TJSONValue; i, j: integer; lID: string; lStatus: string; lChanged: string; begin // Das gesamte JSON-Objekt lJSON := TJSONObject.ParseJSONValue(Memo1.Text) as TJSONObject; try Value := lJSON.Values['js']; if Assigned(Value) and (Value is TJSONObject) then begin // Das js-Objekt lInnerJSON := TJSONObject(Value); Value := lInnerJSON.Values['data']; if Assigned(Value) and (Value is TJSONArray) then begin // Das data-Array Arr := TJSONArray(Value); for i := 0 to Arr.Count - 1 do if Arr.Items[i] is TJSONObject then begin // Die einzelnen Objekte im data-Array lInnerJSON := TJSONObject(Arr.Items[i]); Value := lInnerJSON.Values['art']; if Assigned(Value) and (Value is TJSONArray) then begin // Das art-Array je data-Objekt lInnerArr := TJSONArray(Value); for j := 0 to lInnerArr.Count - 1 do if lInnerArr.Items[j] is TJSONObject then begin // Das gesuchte Objekt innerhalb des art-Arrays lArt := TJSONObject(lInnerArr.Items[j]); if not lArt.TryGetValue<string>('id', lID) then lID := ''; if not lArt.TryGetValue<string>('status', lStatus) then lStatus := ''; if not lArt.TryGetValue<string>('changed', lChanged) then lChanged := ''; ShowMessage (Format('ID: %s, Status: %s, Changed: %s', [lID, lStatus, lChanged])); end; end; end; end; end; finally lJSON.Free; end; end; |
AW: JSON Wert lesen
Ui..., das ging aber schnell. Super. Vielen Dank.
An meinem Muster funktioniert es sehr gut. Das wird auch in meinem Projekt funktionieren. Du hast mir das perfekt vorgemacht. Darum ging es mir auch. Den Rest kann ich mir schon selbst aufbauen, da ist nämlich noch mehr was Probleme bereitet. Nun habe ich einen Ansatz wie es zu realisieren ist. Das reicht mir vollkommen. Ein wenig mitdenken muss ich ja auch. Sonst hätte es keinen Sinn. Noch Mal. VIELEN DANK. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz