Einzelnen Beitrag anzeigen

mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#24

AW: Json unbekanntes feld abfangen

  Alt 16. Dez 2020, 20:03
Ich habe deinen Post mehrmals durchgelesen, aber so ganz genau weis ich immer noch nicht, welche Infos dir fehlen.
Mein bestreben ist in der Json nach 'display_alias' zu suchen und darauf hin den Count auszulegen.
display_alias kommt 172 mal in der Json vor diese und die nachfolgenden Einträge muss ich parsen bis zum nächsten 'display_alias'
und so lange bis er halt nicht mehr vorkommt.
"channels" ist ein Array. Mit meinem Beispiel durchlaufe ich alle Objekte dieses Arrays. docChannels zeigt auf das Object, das mit dem Index nRun gerade im Array ausgewählt ist.

Hier noch mal ein Beispiel. Zur Sicherheit gebe den vollständigen Pfad für die JSON-Datei ein.
Delphi-Quellcode:
var
  s: String;
  i: Integer;
  iRun, nRun: Integer;
  doc: TDocVariantData;
  docChannelGroup: PDocVariantData;
  docChannels: PDocVariantData;
begin
  doc.InitJSONFromFile('Channels_data.json', JSON_OPTIONS_FAST_EXTENDED);
  if not doc.B['success'] then Exit; //=>

  i := 0;
  for iRun := 0 to doc.A['channel_groups'].Count - 1 do
  begin
    docChannelGroup := doc.A['channel_groups']._[iRun];
    for nRun := 0 to docChannelGroup.A['channels'].Count - 1 do
    begin
      docChannels := docChannelGroup.A['channels']._[nRun];
      s := s + ' | ' + docChannels.S['display_alias'];
      Inc(i);
    end;
  end;

  ShowMessage(s);
  ShowMessage(i.ToString);
end;
Kleiner Hinweis: Lade die JSON-Datei in Notepad++. Hier kannst du Zweige ein- und ausklappen und die Struktur, ob es ein Objekt oder Array ist, sofort erkennen. Bei einem Array wendest du das oben gezeigt Schema zum Durchlaufen an und kopierst danach nur noch die Namen der Eigenschaften aus der JSON-Datei in die Zugriffsfunktionen.

Bis bald...
Thomas
  Mit Zitat antworten Zitat