powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / библиотека для сохранения/восстановления свойств компонент
25 сообщений из 119, страница 4 из 5
библиотека для сохранения/восстановления свойств компонент
    #40022079
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как вместо цикла

alekcvp
Код: pascal
1.
2.
while Iterator.Next do
        WriteLn('Key: ', Iterator.Key, ', Value: ', Reader.Value.ToString);



обратиться к этим 4ём значениям по индексу?

т.е. что-то типа
Код: pascal
1.
2.
3.
a := Iterator.AsValue[0].asInteger;
b := Iterator.AsValue[1].asInteger;
c := Iterator.AsValue[2].asBoolean;



?
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022084
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще непонятно, как узнать количество элементов у объекта и у массива
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022088
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
ага, я понял:
Код: pascal
1.
2.
3.
4.
5.
            while Iterator.Next do
            begin
              if Iterator.AsValue.IsType<Integer> then
                sName := Iterator.AsValue.ToString;  //Reader.Value.ToString;
            end;


AsInteger лишний.

X11
а как вместо цикла
обратиться к этим 4ём значениям по индексу?

т.е. что-то типа
Код: pascal
1.
2.
3.
a := Iterator.AsValue[0].asInteger;
b := Iterator.AsValue[1].asInteger;
c := Iterator.AsValue[2].asBoolean;



Ты значение слова Iterate знаешь?
Сохранить в список или массив и потом делать с ними что угодно.

Собственно с твоими запросами, как мне кажется, тебе XSuperObject больше подойдёт.
Там и количество элементов и обращение по индексам...
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022093
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Ты значение слова Iterate знаешь?
Сохранить в список или массив и потом делать с ними что угодно.


удивлен, что за 5 лет авторы библиотеки не удосужились добавить это сами
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022094
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
alekcvp
Ты значение слова Iterate знаешь?
Сохранить в список или массив и потом делать с ними что угодно.

удивлен, что за 5 лет авторы библиотеки не удосужились добавить это сами

Ты сейчас удивляешься, что за 20 лет эксплуатации снегоуборщиков к ним не додумались кузов-самосвал приделать, приходится вторую машину гонять...
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022326
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp

Ты сейчас удивляешься, что за 20 лет эксплуатации снегоуборщиков к ним не додумались кузов-самосвал приделать, приходится вторую машину гонять...

Ну тут всё логично, безостановочная уборка, самосвал заполнился, поехал разгружаться, вместо него тут же встал другой.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022328
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Дегтярев Евгений,

ну... не буду сильно спорить, просто попытаюсь обосновать: я не вижу смысла писать в джейсон названия свойств по той простой причине, что это излишне. Меньше данных гонять между базой и приложением. Особенно, если столбцов много, а у меня их много. Особенно, если на форме таблиц несколько.

я понимаю почему, но когда нужно будет добавить/убрать парамтер из массива, с обратной совместимостью будет беда... может она и не нужна, тут хозяин барин.
а по поводу размера:
- json это ниразу не про компактность
- уже есть замеры, показывающие влияние размера json на скорость его получения?
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022370
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений
- json это ниразу не про компактность

Ну по сравнению с другими форматами, может и да, но нужно учитывать и удобство, чтобы можно было отладить и подсмотреть, что и где не так, мало того, можно отключить форматирование, ну т.е. что-то среднее можно получить.
Можно, конечно, выдумать что-то свое, или что-то похожее на CSV, минимальное, типа: 0,105,1,0.


Дегтярев Евгений
- уже есть замеры, показывающие влияние размера json на скорость его получения?

замеры я не делал, ни с чем не сравнивал, есть замеры только здесь, в той самой статье
но там замеры на мегабайтных файлах и там 0,3-2 сек, а у меня json одной таблицы - до 2кб.

даже если я послушаюсь твоего совета и массивы заменю на объекты (имя:параметр), то особо ничего и не поменяется ПМСМ.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022691
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, что Iterator.Index у массива начинается с -1 (минус 1) , а не с нуля
Т.е. в джейсон-массиве [0,55,true,false] значение 55 лежит на нулевом индексе

или у меня опять что-то не так с кодом?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        if Iterator.&Type = TJsonToken.StartArray then
          if Iterator.Recurse then// входим внутрь массива
          begin
            s := Iterator.Path;// "ID"

            while Iterator.Next do// цикл по массиву "ID":[0,55,true,false]
            begin
              case Iterator.Index of
                0: begin

                    if Iterator.AsValue.IsType<Integer> then
                      idx := Iterator.AsValue.AsInteger
                    else
                      continue;

                    if grid.Columns.Count-1 >= idx then
                      col.Index  := idx;
                end;// 0



UPD:
http://docwiki.embarcadero.com/Libraries/Sydney/en/System.JSON.Builders.TJSONIterator.Index Index of the current token if it is a value within an array, or -1 if the token is not a value within an array.
Индекс текущего токена, если это значение в массиве, или -1, если токен не является значением в массиве.

ппцц... зачем -1, "если значение в массиве"? что сподвигнуло авторов библиотеки так сделать?
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022713
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Индекс текущего токена, если это значение в массиве, или -1, если токен не является значением в массиве.

ппцц... зачем -1, "если значение в массиве"? что сподвигнуло авторов библиотеки так сделать?


напутал что-то я опять
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022725
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или разработчики

Код: pascal
1.
2.
3.
4.
5.
6.
7.
// вошли внутрь массива
//цикл по массиву
while Iterator.Next do
            begin
              JsonToken := Iterator.&Type;// здесь тип integer

              case Iterator.Index of// здесь значение индекса = минус 1



почему так?
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022742
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
        if Iterator.&Type = TJsonToken.StartArray then
        begin
          idx := Iterator.AsValue.AsInteger;// здесь 0
          idx := Iterator.Index;// здесь минус 1



Из справки:
Index of the current token if it is a value within an array, or -1 if the token is not a value within an array.

Индекс текущего токена, если это значение в массиве, или -1, если токен не является значением в массиве.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022747
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю 2 снимка на одной бряке, где видно, что тип токена - массив, и индекс равен -1.

Индекс текущего токена, если это значение в массиве, или -1, если токен не является значением в массиве.

я не понимаю справки или там действительно баг?
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022754
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прастити, делфи не знаю, но имхуется мне что StartArray это скобочка
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022756
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получается, да
http://docwiki.embarcadero.com/Libraries/Sydney/en/System.JSON.Types.TJsonToken StartArray The start of an array [.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022759
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
получается, да
http://docwiki.embarcadero.com/Libraries/Sydney/en/System.JSON.Types.TJsonToken StartArray The start of an array [.

получается, после StartArray нужно вызвать Recurse?

Всё равно после Recurse Iterator.Index равен -1
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022771
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Два разных результата одной и той же процедуры, вот код
Код: pascal
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.
procedure TForm1.btnReadArrayClick(Sender: TObject);
const sJSon = '{"ID":[0,55,true,false], "ID2":[1,60,false,false]}';

var
 Iterator: TJSONIterator;
 Reader: TJsonTextReader;
 TextReader: TStringReader;
begin

  TextReader  := TStringReader.Create(sJSon);
  Reader      := TJsonTextReader.Create(TextReader);
  Iterator    := TJSONIterator.Create(Reader);

  try
    while Iterator.Next do
    begin
      if Iterator.&Type = TJsonToken.StartArray then
        if Iterator.Recurse then
          while Iterator.Next do
          begin
            Memo1.Lines.Add('Key: ' + Iterator.Key);
            Memo1.Lines.Add('Index:' + Iterator.Index.ToString);
          end;

    end;//while

  finally
    FreeAndNil(TextReader);
    FreeAndNil(Iterator);
    FreeAndNil(Reader);
  end;
end;


Delphi 10.3.3 и Delphi 10.4.1
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022772
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Ну значит в 10.4 как обычно косяк :)
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022782
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
alekcvp
X11,

Ну значит в 10.4 как обычно косяк :)


Пользоваться надо проверенными библиотеками, которые не меняют код в зависимости от версии дельфей
А надеяться на то, что в ДНК дельфей что-то не поменяется от версии к версии, в том числе, и в худшую сторону, как-то глупо
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022784
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит, вообще, и Дельфи использовать глупо?
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022791
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видать придется на XSuperObject переходить.

defecator
А надеяться на то, что в ДНК дельфей что-то не поменяется от версии к версии, в том числе, и в худшую сторону, как-то глупо

Ну тут палка о двух концах.

Дело в том, что было несколько раз так, что я использовал что-то третесторонне, а автор потом переставал поддерживать.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022802
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Собственно с твоими запросами, как мне кажется, тебе XSuperObject больше подойдёт.


всё, сдаюсь

Код: plaintext
{"column1":[0,55,true,false], "column2":[1,60,false,false]}, "column3":[2,177,false,false]}


не могу понять, как правильно сделать двойной цикл по объектам-колонкам и массиву
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022815
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что сегодня за день?
Вот опять.
Почему 2, если в джейсоне 3 объекта?
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022830
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
X11
Что сегодня за день?
Вот опять.
Почему 2, если в джейсоне 3 объекта?



Потому что у тебя JSON неправильный.
Куда ты скобки расставил ?

Вот он тебе два объекта и показывает
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022833
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!!!!!

А как сделать итерации?
Примеры посмотрел, но все они привязываются к имени объекта:
Код: pascal
1.
2.
for AMember in X.A['adresses'] do
  begin




Я ведь не знаю, какие там имена. Наоборот - мне имена нужно получить.
...
Рейтинг: 0 / 0
25 сообщений из 119, страница 4 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / библиотека для сохранения/восстановления свойств компонент
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]