Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308

Значения из JSON распределить в таблицу StringGrid

12.02.2024, 18:24. Показов 1465. Ответов 20

Студворк — интернет-сервис помощи студентам
Всем привет. Имеются данные в формате JSON:

Кликните здесь для просмотра всего текста
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
{
  "id":"myid",
  "myarray":
  {
    "code":0,
    "elements":
    [
      {
        "num":1,
        "time":81,
        "speed":48,
        "score":999
      }
,
      {
        "num":2,
        "time":88,
        "speed":49,
        "score":999
      }
,
      {
        "num":3,
        "time":83,
        "speed":48,
        "score":999
      }
,
      {
        "num":4,
        "time":0,
        "speed":0,
        "score":0
      }
,
      {
        "num":5,
        "time":83,
        "speed":48,
        "score":999
      }
,
      {
        "num":6,
        "time":0,
        "speed":0,
        "score":0
      }
,
      {
        "num":7,
        "time":82,
        "speed":48,
        "score":999
      }
,
      {
        "num":8,
        "time":81,
        "speed":48,
        "score":999
      }
,
      {
        "num":9,
        "time":79,
        "speed":49,
        "score":999
      }
,
      {
        "num":10,
        "time":79,
        "speed":49,
        "score":999
      }
,
      {
        "num":11,
        "time":0,
        "speed":0,
        "score":0
      }
,
      {
        "num":12,
        "time":79,
        "speed":49,
        "score":999
      }
    ]
  }
}

Нужно распределить их в таблицу StringGrid размерностью 4x4, с вертикальной нумерацией. Но есть несколько условий:
• Всего таблиц 4. В первую нужно распределить только значения num, во вторую time, в третью speed и в четвертую score;
• В некоторых блоках значения пустые, но их тоже нужно выводить;
• В коде нужно иметь возможность указать с какого и по какой блок нужно выводить в таблице;
• Найти максимальное значение, допустим time и вывести его любым способом, хоть ShowMessage.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.02.2024, 18:24
Ответы с готовыми решениями:

StringGrid: занести значения массива в таблицу 10х10 последовательно
как занести значения массива(случайные значения по закону распределения) в таблицу 10х10 последовательно(так как они числа генерируются(не...

Не получается распределить строки и таблицу
Здравствуйте хтмл изучаю несколько дней,помогите плз вот скрипт,мне нужно чтобы таблица и текст были на одном уровне.Спс всем. ps.На...

Распределить значения из 1-го столбца по 3-ем столбцам
В одной ячейке указан тип шкалы(начало, конец) и размерность шкалы. Появилась необходимость разместить начало шкалы, конец шкалы и...

20
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
12.02.2024, 23:20
https://github.com/onryldz/x-superobject

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
interface
 
type
TArrayElement = record
  num, time, speed, score : integer;
end;
 
TMyArray = class
  code: integer;
  elements:TArray<TArrayElement>
end;
 
TMуObject = class()
  id: string;
  myarray: TMyArray;
end;
 
implementation
uses XSuperObject;
 
...
  var myObj : TMyObject := TMyObject.FromJson(JsonString);
 
  for var i : integer := 0 to length(myObj.myarray.elements) - 1 do
  begin
    var item : TArrayElement := myObj.myarray.elements[i];
  // теперь у вас в  item очередной элемент массива
  // кладите, куда хотите, хоть в ShowMessage()
  end;
1
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308
13.02.2024, 02:35  [ТС]
krapotkin, а как мне правильно установить этот x-superobject?
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
13.02.2024, 08:36
если пользуетесь git то просто
git clone _https://github.com/onryldz/x-superobject (без знака подчеркивания, это чтобы ссылку не ставило)
если нет, то просто скачать 2 pas-файла и 1 inc себе в исходники и добавить в проект
устанавливать ничего не надо
1
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308
13.02.2024, 16:01  [ТС]
krapotkin, ваш уровень конечно впечатляет.
Но пока не могу никак добавить ваш код, чтобы компилировался без ошибок.

Ругается на TMуObject = class() в 30-й строке.

Можете глянуть?

Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, XSuperJSON, XSuperObject;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
type
TArrayElement = record
  num, time, speed, score : integer;
end;
 
TMyArray = class
  code: integer;
  elements:TArray<TArrayElement>
end;
 
TMуObject = class()
  id: string;
  myarray: TMyArray;
end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var myObj : TMуObject := TMyObject.FromJson(JsonString);
 
begin
 
for var i : integer := 0 to length(myObj.myarray.elements) - 1 do
  begin
    var item : TArrayElement := myObj.myarray.elements[i];
  // теперь у вас в  item очередной элемент массива
  // кладите, куда хотите, хоть в ShowMessage()
  end;
 
end;
 
end.
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,329
13.02.2024, 16:31
Цитата Сообщение от Рафик Посмотреть сообщение
Ругается на TMуObject = class() в 30-й строке.
Убери скобки.
1
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308
13.02.2024, 16:43  [ТС]
AzAtom, пробовал убирать.
Тогда ругается в 43-й строке на TMyObject.
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,329
13.02.2024, 16:49
Рафик, в разделе var такая конструкция не допустима. Нужно перенести в область команд:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
 
begin
var myObj : TMуObject := TMyObject.FromJson(JsonString);
 
for var i : integer := 0 to length(myObj.myarray.elements) - 1 do
  begin
    var item : TArrayElement := myObj.myarray.elements[i];
  // теперь у вас в  item очередной элемент массива
  // кладите, куда хотите, хоть в ShowMessage()
  end;
 
end;
1
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308
13.02.2024, 17:33  [ТС]
AzAtom, всё равно ругается.

Я понимаю, что в данном коде JsonString не существует, но проблема не в этом.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
14.02.2024, 01:33
Лучший ответ Сообщение было отмечено Рафик как решение

Решение

пример работает в D11 +
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
unit Unit1;
 
interface
 
uses
  System.Classes,
  System.SysUtils,
 
  Vcl.Controls,
  Vcl.StdCtrls,
  vcl.Forms,
 
  XSuperObject
  ;
 
type
  TForm1 = class(TForm)
    m1: TMemo;
    b1: TButton;
    procedure b1Click(Sender: TObject);
  private
  public
  end;
 
  TArrayElement = record
    num, time, speed, score: integer;
  end;
 
  TMyArray = class
    code: integer;
    elements: TArray<TArrayElement>
  end;
 
  TMyObject = class
    id: string;
    myarray: TMyArray;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
{ TForm1 }
 
procedure TForm1.b1Click(Sender: TObject);
begin
  var JsonString : string := m1.Text;
  var myObj : TMyObject  := TMyObject.FromJson(JsonString);
 
  for var i: integer := 0 to length(myObj.myarray.elements) - 1 do
  begin
    var item: TArrayElement := myObj.myarray.elements[i];
  // теперь у вас в  item очередной элемент массива
  // кладите, куда хотите, хоть в ShowMessage()
  end;
end;
 
end.
Миниатюры
Значения из JSON распределить в таблицу StringGrid  
1
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308
14.02.2024, 15:34  [ТС]
krapotkin, пробую вывысти хотя бы максимальное значение массива (11 строка). Выдаёт совершенно непонятное большое число.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
begin
  var
    JsonString: string := Memo1.Text;
  var
    myObj: TMyObject := TMyObject.FromJson(JsonString);
  for var i: integer := 0 to length(myObj.myarray.elements) - 1 do
  begin
    var
      item: TArrayElement := myObj.myarray.elements[i];
    ShowMessage(IntToStr(item.score.MaxValue));
  end;
end;
Или как допустим вывести значение speed, там где num = 5?

А ещё интересует, как их все вывести в таблицу именно вот в таком порядке (вертикальные столбцы):
Название: 2024-02-14_19-41-30.png
Просмотров: 124

Размер: 2.9 Кб
0
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308
14.02.2024, 15:45  [ТС]
p.s. в первом после указано 12 блоков, а здесь 16, но это не важно.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
14.02.2024, 16:34
это какой-то ну совсем детсадовский вопрос
у вас есть массив элементов типа TArrayElement
Delphi
1
2
3
TArrayElement = record
  num, time, speed, score : integer;
end;
нужно в каждую строку грида поместить значение элемента

Delphi
1
2
3
4
grid.cells[0, arow] := e.num.toString;
grid.cells[1, arow] := e.time.toString;
grid.cells[2, arow] := e.speed.toString;
grid.cells[3, arow] := e.score.toString;
1
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308
15.02.2024, 17:25  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
это какой-то ну совсем детсадовский вопрос
Ну, так и тема в разделе "Для начинающих".
Спасибо, вы очень помогли. Но вот по поводу заполнения таблицы, кажется не совсем верно меня поняли.
Мне нужно не в каждом столбце выводить отдельные значения (num, time, speed, score), а например в одной таблице полностью значения num, в другой time и т.д., но чтобы при заполнении первого столбца, данные продолжали заполняться сверху на следующем столбце.
Надеюсь понятно объяснил, а то у меня с этим проблемы)
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
15.02.2024, 23:53
неа. объясняйте еще)
а лучше картинку - вот данные - вот что должно получиться
0
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308
16.02.2024, 10:52  [ТС]
krapotkin, если это не рофл, то в 11 сообщении я присылал картинку уже )
Но думаю тут уже сам смогу разобраться, надеюсь. Спасибо вам большое за помощь.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
16.02.2024, 13:02
но тут же не в программировании дело, а в математике?

Дано:
Index от 0 до N
RowCount - количество столбцов
Найти:
координаты (Col, Row) = f(Index)
Решение:
допустим RowCount = 4
смотрим вручную, чему должны быть равны Col, Row для Index например от 0 до 8
0: (0,0)
1: (0,1)
2: (0,2)
3: (0,3)
4: (1,0)
5: (1,1)
6: (1,2)
7: (1,3)
8: (2,0)
думаю, формула уже понятна?
Col = Index DIV RowCount;
Row = Index MOD RowCount;
1
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308
16.02.2024, 15:30  [ТС]
krapotkin, да, я во всём разобрался. Ещё раз огромное спасибо вам.
0
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308
19.02.2024, 15:34  [ТС]
krapotkin, пытаюсь переделать ваш код под другой JSON-файл, но уже битый час бьюсь безрезультатно.
Кликните здесь для просмотра всего текста
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "id":"man",
  "ret":
  {
    "code":0,
    "mans":
    [
      1234,
      438,
      0,
      1597
    ]
  }
}

В первом JSON-файле были вложенные массивы, а тут нет, сначала казалось, что это будет легко переделать, но увы...
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,656
Записей в блоге: 21
19.02.2024, 16:03
нам в школе преподавали принцип "по аналогии" . он до сих пор работает
выделяем элемент верхнего уровня
JSON
1
2
3
4
5
6
7
{
  "id":"man",
  "ret":
  {
    ...
  }
}
получаем
Delphi
1
2
3
4
TClass1 = class
  id : string;
  ret : TClass2;
end;
далее, внутри ret
JSON
1
2
3
4
5
6
7
8
"code":0,
    "mans":
    [
      1234,
      438,
      0,
      1597
    ]
соответственно
Delphi
1
2
3
4
TClass2 = class
 code: integer;
 mans: TArray<integer>;
end;
итого

Delphi
1
var obj : TClass1 := TClass1.FromJson(JSON);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.02.2024, 16:03
Помогаю со студенческими работами здесь

Распределить и распечатать значения из файла
Всем привет! Имеется файл input.txt. Содержание этого файла такое: ...

Распределить значения по годам в зависимости от параметра
Есть куча домов. У каждого дома рассчитывается параметр описывающий его износ (в баллах). В зависимости от количества баллов нужно...

Парсинг JSON и занос его к stringgrid
Доброго времени суток. Ребята подскажите как можно спарсить JSON вида и построчно записать в stringgrid. Хотя...

Нужно распределить значения переменных A,B и C так, чтобы в итоге оказалось A>=B>=C
Условие задачи: A dd ? B dd ? C dd ? Перераспределить значения переменных А,В и С так,чтобы оказалось А&gt;=B&gt;=C.Для решения...

Триггер: автоматически добавить внесенные в таблицу Sales значения в таблицу-копию Sales_Copy
Здравствуйте. Недавно начал проходить ms sql. Есть задание - написать триггер, который автоматически добавляет внесенные в таблицу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru