![]() |
JSON Fragen
Guten Morgen zusammen,
ich habe zwei Fragen: 1. Wenn ich mir mit
Code:
den Access-Token abhole, steht der noch in Anführungszeichen, die ich dann noch extra entfernen muss.
token := Obj.GetValue('access_token').ToString;
Ist das der 'normale' Weg, oder gibt's da was eleganteres, wo das automatisch geht? 2. Wieso bekomme ich hier einen Fehler in der Typumwandlung inkl Zugriffsverletzung?
Code:
Vielen Dank im voraus für eure Tips!
RESTRequest3.Execute;
jsonValue:=RESTResponse3.JSONValue; //Memo2.Lines.Add(jsonValue.ToString); if Assigned(JsonValue) then try JSonArray := JsonValue as TJSONArray; j := 1; for i := 0 to JSonArray.Count-1 do begin JSonObject := JSonArray.Items[i] as TJSonObject; description := JSonObject.GetValue('description').Value; Beschreibung.Text := description; Inc(j); end; finally JsonValue.Free; end; |
AW: JSON Fragen
Zu 1: versuch mal mit mit Value statt ToString.
Zu 2: bist Du sicher, dass es ein TJSONArray ist? |
AW: JSON Fragen
Zu 1. noch:
Delphi-Quellcode:
token:=obj.GetValue<string>('access_token')
Oder noch etwas schöner:
Delphi-Quellcode:
token:=obj.TryGetValue<string>('access_token','')
Liefert dir das Token oder, falls der Eintrag in deinem JSON nicht vorhanden ist, einen leeren String. |
AW: JSON Fragen
Punkt 1 erledigt, vielen Dank!
Zu 2, ja das ist definitv ein Array, startet mit
Code:
{"data":{"id":"d6f5bd20-e540-11ef-a6d5-4f6ed666ed93","identifier":"v-8017a5bf","product_number":"1402"....
|
AW: JSON Fragen
Ich sehe da kein Array, wo ist denn die eckige Klammer?
Code:
In diesem Beispiel ist data ein JSON-Array mit 2 Elementen.
{"data":[{"bla":"blubb"}, {"bla":"wuppdi"}]}
|
AW: JSON Fragen
Sorry, anbei das komplette Teil, anonymisiert. Da in den Unterpunkten eckige Klammern sind, bin ich davon ausgegangen, dass es ein Array ist.
Code:
{
"data": { "id": "dfab3dd0-e540-11ef-8ccd-e97111112517", "identifier": "v-e5becf11", "product_number": "4601", "master_product_number": "1F423-8teGrw0nY8", "name": "Repter", "description": "ReiS/UK/EU", "tags": "Rer", "language": "de", "locale": "en", "properties": { "color_group": [ "White" ], "country_origin": "China", "delivery_time": { "min": 35, "max": 42 }, "finishings": [ { "group": "Printing" } ], "images": [ { "src": "https:jpg" }, { "src": "https:jpg" }, { "src": "https:jpg" } ], "legal_information": "Henter.", "material_group": [ "ABS)" ], "minimum_order_amount": 250, "price_ranges": [ { "amount": 100, "price_ek": 8.68, "price_uvp": 11.28 }, { "amount": 250, "price_ek": 8, "price_uvp": 10.4 }, { "amount": 500, "price_ek": 7.64, "price_uvp": 10.16 } ] }, "groups": [ { "label": "Ela", "options": [ { "label": "Eles", "value": "03066001" } ] } ], "created": "2025-02-07 10:47:06", "updated": "2025-02-07 10:55:02", "selected": true, "parent_identifier": "p-5731c03a", "available_translations": [ 0, 1 ], "made_in_europe": false } } |
AW: JSON Fragen
Zitat:
Übrigens: Das RESTResponse3.JSONValue gehört RESTResponse3 und sollte nicht extern freigegeben werden. |
AW: JSON Fragen
Was Uwe sagt. :-) Die Frage ist, was du konkret brauchst - wenn du dir nur einen bestimmten Wert rausziehen willst, bist du schnell durch. In deinem ersten Post wolltest du "description" lesen. Dann bist du mit
Delphi-Quellcode:
description:=JsonValue.TryGetValue<string>('data.description','');
schnell fertig. Wenn du das ganze Ding parsen musst oder alles in ein eigenes Objekt überführen musst, sind andere Wege vielleicht besser. Das kommt dann auf deine Anforderung an. |
AW: JSON Fragen
Da ich nur ein paar einzelne Werte brauche, müsste ich mit der schnelle Methode hinkommen.
Code:
wirft mir allerdings einen Fehler aus: Es gibt keine überladene Version von TJSONVALue...
description:=JsonValue.TryGetValue<string>('data.description','');
|
AW: JSON Fragen
Hast du eine etwas ältere Delphi-Version? Ich weiß nicht genau, seit wann es diese generischen GetValue und TryGetValue-Methoden im TJSONValue gibt - vielleicht bei dir noch nicht.
Das hier sollte auch tun, ist aber mit den harten Typecasts natürlich nicht so schön und sicher:
Delphi-Quellcode:
TJSONString(TJSONObject(JsonValue).GetValue('data.description')).Value
Genaugenommen müsstest du hier eigentlich prüfen, ob JsonValue überhaupt ein TJSONObject ist und ob die Rückgabe von data.description ein JSONString ist. Aber wie hat mein Info-Prof früher immer so schön geschrieben: diese Aufgabe überlassen wir dem geneigten Leser. ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 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