Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   JSON Elementname mit JSON auslesen (https://www.delphipraxis.net/202533-json-elementname-mit-json-auslesen.html)

amigage 14. Nov 2019 16:32

JSON Elementname mit JSON auslesen
 
Hallo,

ich versuche mit Superobject eine JSON Struktur (hier vereinfacht dargestellt) auszulesen.

Code:
{
  "profile":{
     "names":{
        "Default":{"showname":"der angezeigte Profilname"},
        "Nummer1":{"showname":"der angezeigte Profilname"}
        }
  }
}
Und zwar benötige ich Zugriff auf die Profile "Default" und "Nummer1" sowie deren jeweiligen Werte "showname".

Delphi-Quellcode:
var
  vJSON: ISuperObject;
  vArray : TSuperArray;
  vItem: ISuperObject;
  I: Integer;
begin
  vJSON := TSuperObject.ParseFile(filename, true);

  vArray := vJSON.A['profile.names'];
  for i := 0 to vArray.Length-1 do
  begin
    vItem := vArray.O[i];
    showmessage(vItem. ??? ); // <---------------
  end;
Wie bekomme ich den Namen des Profiles unterhalb von "names"?
Ich brauche ja den mir erst einmal unbekannten Namen des Profils, um dann den anzuzeigenden Profilnamen ermitteln zu können.
Ich stehe leider etwas auf dem Schlauch...

Vielen Dank für einen Tipp!

Stevie 15. Nov 2019 12:02

AW: JSON Elementname mit JSON auslesen
 
Was unter 'profile.names' steht, ist kein Array, sondern ein Objekt mit 2 Eigenschaften, die jeweils wieder ein Objekt beinhalten.
Soweit ich gesehen habe, bietet SuperObject keinen einfachen Weg, um Name-Wert Paare eines Objekts zu iterieren.

Aber so geht es mit JsonDataObjects:

Delphi-Quellcode:
var
  vJSON: TJsonObject;
  vObj: TJsonObject;
  vItem: TJsonNameValuePair;
begin
  vJSON := TJsonBaseObject.ParseFromFile(filename, true) as TJsonObject;
  vObj := vJSON.O['profile'].O['names'];
  for vItem in vObj do
    Writeln(vItem.Name, ':', vItem.Value.S['showname']);
end.

amigage 18. Nov 2019 13:36

AW: JSON Elementname mit JSON auslesen
 
Hallo und vielen Dank für den Hinweis auf diese Lösung.
Ich werde es ausprobieren.

Edit: JsonDataObjects ausprobiert und funktioniert wie gewünscht. Danke :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 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