![]() |
Ist das valides JSON?
Ich bin gerade am Schreiben einer Delphi Klasse die mit REST.Json in der Form übergeben wrid. nun bekomme ich dann aber eine Antwort, mit der Delphi REST.Json nicht zurecht kommt.
Die Anfrage muss ich wie folgt senden. Delphi macht da su meiner Klasse genau was sie soll:
Code:
Als Antwort erhalten ich foglendes JSON, womit die Delphi Deserialisierung nicht zuerecht kommt.{ "allowedPaymentMethodConfigurations": [ { "id": 40941 } ] }
Code:
Ist das wirklich valides JSON? Oder was will uns dieses Konstrukt genau sagen? Ein JSON Validator liefert hier komischerweise keinen Fehler.
{
"allowedPaymentMethodConfigurations":[ 40941 ] } |
AW: Ist das valides JSON?
Valide sind beide, wobei die erste Version ein Objekt-Array und die zweite ein Integer-Array beinhaltet.
|
AW: Ist das valides JSON?
ok das würde dann heissen, dass ich hier zwei unterschiedliche Klassen machen müsste. Eine für das Senden und eine für die Antwort, damit Delphi damit zu recht kommt. Richtig?
|
AW: Ist das valides JSON?
Es sieht so aus.
|
AW: Ist das valides JSON?
Naja, wenn es unterschiedliche Strukturen sind, müssen deine Objekte dem logischerweise auch entsprechen. Alternativ kannst du das natürlich auch einfach "zu Fuß" auswerten, wenn das so eine relativ einfache Struktur ist - dann musst du dafür nicht extra ein Objekt anlegen.
Kleines Beispiel-Programm, welches die 40941 aus deinem Beispiel-JSON ausliest:
Delphi-Quellcode:
program jarray;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, System.Classes, System.JSON, System.Generics.Collections; var strList: TStringList; jValue: TJSONValue; jArr: TJSONArray; begin try { TODO -oUser -cConsole Main : Code hier einfügen } strList:=TStringList.Create; strList.LoadFromFile(ParamStr(1)); jValue:=TJSONObject.ParseJSONValue(strList.Text); if jValue is TJSONObject then begin if TJSONObject(jValue).TryGetValue<TJSONArray>('allowedPaymentMethodConfigurations',jArr) then begin if (jArr.Count>0) and (jArr.Items[0] is TJSONNumber) then Writeln(TJSONNumber(jArr.Items[0]).Value) else writeln('id not found'); end; end else Writeln('no JSON object'); jValue.Free; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. |
AW: Ist das valides JSON?
Das ganze JSON Object ist schon etwas grösser. Habe das nun aber soweit angepasst, dass es nun passt. Danke für die Tipps.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 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 by Thomas Breitkreuz