Пытаюсь из JSON вывести информацию обо всех соревнованиях (объект evts в json) по всем чемпионатам в listview. Не могу понять почему выводит совершенно другие значения, причём во всех столбцах оно одинаковое.
Код:
procedure TForm1.load_games();
var
Res: Boolean;
strStream: TStringStream;
json: TlkJSONbase;
chmps_list, evnts_list: TlkJSONbase;
i, j: integer;
LI:TlistItem;
ids: array [0..1023] of Cardinal;
k: Cardinal;
sex: string;
chmp_name: string;
chmp_idx, evnt_idx: integer;
evnt_json: TlkJSONbase;
begin
Form1.games_list.Items.BeginUpdate;
// Заомнаем id отмеченных элементов
k := 0;
for i := 0 to Form1.games_list.Items.Count - 1 do
begin
if Form1.games_list.Items[i].Checked = True then
begin
ids[k] := StrToInt(Form1.games_list.Items[i].SubItems[0]);
Inc(k);
end;
end;
Form1.games_list.Clear;
try
HTTP.Document.Clear;
HTTP.Headers.Clear;
// Получение данных
Res := HTTP.HTTPMethod('GET', 'http://.....');
if (Res = True) then
begin
strStream:=TStringStream.Create('');
strStream.CopyFrom(HTTP.Document, HTTP.Document.Size);
json := TlkJSON.ParseText(strStream.DataString) as TlkJSONbase; // Разбор JSON
if json.Field['reply'].Field['sports'].Field['58'] <> nil then
begin
chmps_list := json.Field['reply'].Field['sports'].Field['58'].Field['chmps'];
for chmp_idx := 0 to chmps_list.Count - 1 do // Проход по всем чемпионатам
begin
chmp_name := VarToStr((chmps_list.Child[chmp_idx] as TlkJSONobjectmethod).ObjValue.Field['name_ch'].Value);
if AnsiPos('женщины', LowerCase(chmp_name)) > 0 then
sex := 'Ж'
else if AnsiPos('мужчины', LowerCase(chmp_name)) > 0 then
sex := 'М'
else
sex := '';
evnts_list := (chmps_list.Child[chmp_idx] as TlkJSONobjectmethod).ObjValue;
for evnt_idx := 0 to evnts_list.Count - 2 do // Проход по всем соревнованиям
begin
evnt_json := (evnts_list.Child[evnt_idx] as TlkJSONobjectmethod).ObjValue;
// Заполняем таблицу
LI:=Form1.games_list.Items.add;
Li.Caption := '';
Li.SubItems.Add(VarToStr(evnt_json.Field['id_ev'].Value));
Li.SubItems.Add(chmp_name);
Li.SubItems.Add(VarToStr(evnt_json.Field['date_ev_str'].Value));
Li.SubItems.Add(sex);
Li.SubItems.Add(VarToStr(evnt_json.Field['name_ht'].Value));
Li.SubItems.Add(VarToStr(evnt_json.Field['name_at'].Value));
try
Li.SubItems.Add(VarToStr(evnt_json.Field['main'].Field['69'].Field['data'].Field[VarToStr(evnt_json.Field['id_ev'].Value)]
.Field['blocks'].Field['Wm'].Field['P1'].Field['kr'].Value));
except
Li.SubItems.Add('');
end;
try
Li.SubItems.Add(VarToStr(evnt_json.Field['main'].Field['69'].Field['data'].Field[VarToStr(evnt_json.Field['id_ev'].Value)]
.Field['blocks'].Field['Wm'].Field['P2'].Field['kr'].Value));
except
Li.SubItems.Add('');
end;
// Восстанавливаем выделение
for j := 0 to k - 1 do
begin
if ids[j] = evnt_json.Field['id_ch'].Value then
begin
Li.Checked := True;
break;
end;
end;
end;
end;
end;
end;
finally
strStream.Free;
json.Free;
Form1.games_list.Items.EndUpdate;
end;
end;