Habe ein kleines Problem beim parsen meiner Json.
Code:
"channels": [
{
"programs": [
{
"i_url": "http://images.zattic.com/cms/3f240530cf1a3bad8f63/format_480x360.jpg",
"e": 1607986200,
"g": [],
Auf channels kann ich zugreifen aber auf programs nicht.
Delphi-Quellcode:
function TZATJSON.GetJSONByNameOrIndex(const AData: Variant): TZATJSON;
begin
case VarType(AData) and VarTypeMask of
varString, varUString, varWord, varLongWord:
if not FItems.TryGetValue(AData, Result) then //>>> Result ist nil weil ich nicht die korrekte Reihenfolge einhalte beim parsen. Nur wie? Wenn ich nicht an programs dran komme.
raise EJSONUnknownFieldOrIndex.Create(format('Unknown field: %s', [AData]))
else
exit;
Delphi-Quellcode:
procedure TEpgDataList.FillList(aZatJson: TZATJSON);
var
lZatJson: TZATJSON;
begin
if assigned(aZatJson) then
begin
lZatJson := aZatJson.JSONByNameOrIndex['channels'];
if assigned(lZatJson) and lZatJson.IsList then
begin
if lZatJson.ListItems.Count > 0 then
addEpgData(lZatJson.ListItems[0]);
end;
end;
end;
Delphi-Quellcode:
procedure TEpgDataList.addEpgData(aZatJson: TZATJSON);
var
entry: TEpgData;
Epgloop: tEpgEntries;
ltemp: TZATJSON;
lEntrienames: tEpgEntryNames;
begin
if assigned(aZatJson) then
begin
// Set up temporary Data
entry := System.default(TEpgData);
lEntrienames := EntryEpgNames;
begin
for Epgloop := Low(tEpgEntries) to High(tEpgEntries) do
// Check if there is a Name.......
if lEntrienames[Epgloop] <> '' then
begin
ltemp := aZatJson[lEntrienames[Epgloop]]; //>>>>>>
>> hier kracht es
wenn ich versuche 'i_url' anzusprechen ohne vorher programs initialisiert zu haben
programs will nicht nach channels und 'i_url' kann ich nicht aufrufen da es ein unterknoten von programs ist.
rufe ich programs auf ohne channels dann kracht es auch.
Also so!
lZatJson := aZatJson.JSONByNameOrIndex['programs'];
wo ist mein Fehler?
Wie kann ich also programs ansprechen damit es gefunden wird.
EDIT:
addiere ich jetzt programs zu den items die in die liste addiert werden sollen dann wird es korrekt gelesen.
Aber die untergeordneten Items werden wieder nicht erkannt.
Delphi-Quellcode:
EntryEpgNames: TEpgEntryNames = ('programs', 'i_url', 'e', 'g', 'ry_u', 'i', 'sr_u', 'c',
'r_e', 'rg_u', 'e_no', 's', 't', 'ser_e', 'c_ids', 'success');
grrr....