Einzelnen Beitrag anzeigen

venice2
(Gast)

n/a Beiträge
 
#23

AW: Json unbekanntes feld abfangen

  Alt 16. Dez 2020, 10:34
Zitat:
Wenn du heute Abend (Nacht) noch ein Problem damit hast, sage einfach bescheid. Ich schaue mir das dann gerne mal an.
Das ist nett von dir werde es mal implementieren.
Danke schön.

Hmm.. Ich glaube wir haben uns nicht richtig verstanden.
Dein Schnipsel gibt mir die Value von display_alias zurück.
Das ist aber nicht was ich wollte.

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.

Also nicht auf docChannels sondern auf
docChannels.S['display_alias']

Es gibt ja nur diese möglichkeiten..
docChannels.SearchItemByProp
docChannels.SearchItemByValue

aber beides führte nicht zum gewünschten Ergebnis.

PS:
EPG ist fertig und funktioniert soweit.
Nun muss ich nur noch die Channels erfolgreich rüberbringen.

so geht es nicht..
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type
  TChannelsData = record
    display_alias: string;
    sharing: BOOL;
    is_radio: BOOL;
    title: string;
    cid: string;
    number: LongInt;
    recording: BOOL;
    success: BOOL;
  end;
var
  iRun, i, nRun: Integer;
  doc: TDocVariantData;
  docChannelGroup: PDocVariantData;
  docChannels: PDocVariantData;
  x: TRawUtf8DynArray;
  gChannels: array of TChannelsData;
begin
  doc.InitJSONFromFile('Channels_data.json', JSON_OPTIONS_FAST_EXTENDED);
  if not doc.B['success'] then
    Exit; //=>

  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];
      for i := 0 to docChannels.A['display_alias'].Count - 1 do // Wie komme ich an den Count und wie finde ich den nächsten Eintrag von 'display_alias'
      begin
        setLength(gChannels, i + 1);

        gChannels[i].display_alias := docChannels.S['display_alias'];
        gChannels[i].sharing := docChannels.B['sharing'];
        gChannels[i].is_radio := docChannels.B['is_radio'];
        gChannels[i].title := docChannels.S['title'];
        gChannels[i].cid := docChannels.S['cid'];
        gChannels[i].number := docChannels.I['number'];
        gChannels[i].recording := docChannels.B['recording'];
      end;
    end;
  end;
end;

Geändert von venice2 (16. Dez 2020 um 10:58 Uhr)
  Mit Zitat antworten Zitat