Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме 15-35 тыс рублей в месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2016, 01:05   #1
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
Вопрос Вывод из JSON в ListView - Delphi

Пытаюсь из 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;
Изображения
Тип файла: jpg Скриншот сделанный 2016-05-19 в 22.32.00.jpg (10.7 Кб, 149 просмотров)
Тип файла: jpg Снимок6.jpg (13.5 Кб, 160 просмотров)
CraZZZy-GameRRR вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод JSON. Проблема - вылетает Exception nevender Общие вопросы Web 1 04.05.2016 02:44
JSON Exception [org.apache.json] spectrum988 Помощь студентам 3 11.12.2015 09:25
Вывод JSON списка в Joomla 3.1.1 kutt Фриланс 4 13.02.2015 06:35
Вывод онлайн JSON списка в php kutt PHP 3 12.02.2015 11:01
Вывод русских символов в json pr1me222 JavaScript, Ajax 1 11.05.2014 14:19