Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Ist das valides JSON? (https://www.delphipraxis.net/206909-ist-das-valides-json.html)

Rolf Frei 8. Feb 2021 16:00

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:
   
{
    "allowedPaymentMethodConfigurations": [
        {
            "id": 40941
        }
    ]
}
Als Antwort erhalten ich foglendes JSON, womit die Delphi Deserialisierung nicht zuerecht kommt.
Code:
{
   "allowedPaymentMethodConfigurations":[
      40941
   ]
}
Ist das wirklich valides JSON? Oder was will uns dieses Konstrukt genau sagen? Ein JSON Validator liefert hier komischerweise keinen Fehler.

DeddyH 8. Feb 2021 16:02

AW: Ist das valides JSON?
 
Valide sind beide, wobei die erste Version ein Objekt-Array und die zweite ein Integer-Array beinhaltet.

Rolf Frei 8. Feb 2021 16:28

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?

DeddyH 8. Feb 2021 16:36

AW: Ist das valides JSON?
 
Es sieht so aus.

Bbommel 8. Feb 2021 16:40

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.

Rolf Frei 8. Feb 2021 16:51

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:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz