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

уже писали ТС про это, но он ниасилил вообще
https://www.clevercomponents.com/articles/article040/

Кстати, этот мне что-то не очень понравился. У Grijjy TgoBsonSerializer помощнее ИМХО.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40021872
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
alekcvp
defecator
пропущено...

Код: pascal
1.
2.
3.
4.
5.
6.
7.
var
  S : TStringList ;
begin
  S := TStringList.Create ;
  S.Add(JSONObject.ToString);
  S.SaveToFile('json.txt');
end ;



А что так длинно?..
Код: pascal
1.
TFile.WriteAllText('json.txt', JSONObject.ToString);



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

уже писали ТС про это, но он ниасилил вообще
https://www.clevercomponents.com/articles/article040/

Кстати, этот мне что-то не очень понравился. У Grijjy TgoBsonSerializer помощнее ИМХО.


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


Да, уже начал, пытаюсь.
Использую новую Дельфи-библиотеку JSON, которая поставляется, начиная с Seatle.
Информации весьма мало.
Сохранять получилось.
Пытаюсь теперь научиться читать/парсить. Сейчас затык с массивами в TJSONIterator
Не могу понять, как прочитать массив значений.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022000
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Не могу понять, как прочитать массив значений.

Так кидали же уже ссылку с примерами:
Там ниже и для массива есть пример.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022004
Фотография 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.
  TextReader  := TStringReader.Create(sJson);
  Reader      := TJsonTextReader.Create(TextReader);
  Iterator    := TJSONIterator.Create(Reader);

  try
    if Iterator.IsUndefined or Iterator.IsNull then
      exit;

    while Iterator.Next do
    begin
      sName := Iterator.Key;
      col := grid.ColumnByName(sName);

      if not Assigned(col) then
        Continue;// не такой колонки


      if Iterator.&Type = TJsonToken.StartArray then
        if Iterator.Recurse then
        begin
          // "colID":[0,55,true,false]
          // "colName":[1,105,true,false]
          while Iterator.Next do
          begin
            sName := Iterator.Key;

          end;
          end;
          Iterator.Return;


        end;



думаю, что ту анонимную процедуру использовать не обязательно, да я хочу попробовать обойтись без неё
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022006
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из справки
http://docwiki.embarcadero.com/Libraries/Sydney/en/System.JSON.Builders.TJSONIterator.Next Next does not:

Enter an array or object item; use Recurse for this purpose.
Return to the parent array; use Return for this purpose.

Next не входит внуть массива; используйте для этого Recurse.
Next не возвращает к родительскому массиву; используйте Return для этого.


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

А сам JSON под кат?..
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022025
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp, не понял...
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022026
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

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


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

нужно прочитать значения массива и присвоих их столбцам таблицы

здесь я кусок для одного столбца покажу

Код: plaintext
1.
2.
3.
4.
5.
"ID": [
        0,
        60,
        true,
        false
    ]
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022033
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Код: plaintext
1.
2.
3.
4.
5.
"ID": [
        0,
        60,
        true,
        false
    ]

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

ну... не буду сильно спорить, просто попытаюсь обосновать: я не вижу смысла писать в джейсон названия свойств по той простой причине, что это излишне. Меньше данных гонять между базой и приложением. Особенно, если столбцов много, а у меня их много. Особенно, если на форме таблиц несколько.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022036
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
const
  JSON =
   ' {"ID": [0, 60, true, false],' +
   ' "LCD": [1, 88, true, false],' +
   ' "OPER_NAME": [2, 60, false, false],' +
   ' "FULL_TYPE": [3, 117, true, false]}';
begin
  var TextReader: TTextReader := TStringReader.Create(JSON);
  var Reader: TJsonReader := TJsonTextReader.Create(TextReader);
  var Iterator: TJSONIterator := TJSONIterator.Create(Reader);
  try
    while Iterator.Next do
    begin
      WriteLn('Element: ', Iterator.Key);
      if not Iterator.Recurse then
        Continue;
      while Iterator.Next do
        WriteLn('Key: ', Iterator.Key, ', Value: ', Reader.Value.ToString);
      Iterator.Return;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  ReadLn;
end.

ЧЯДНТ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Element: ID
Key: 0, Value: 0
Key: 1, Value: 60
Key: 2, Value: True
Key: 3, Value: False
Element: LCD
Key: 0, Value: 1
Key: 1, Value: 88
Key: 2, Value: True
Key: 3, Value: False
Element: OPER_NAME
Key: 0, Value: 2
Key: 1, Value: 60
Key: 2, Value: False
Key: 3, Value: False
Element: FULL_TYPE
Key: 0, Value: 3
Key: 1, Value: 117
Key: 2, Value: True
Key: 3, Value: False
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022039
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Код: pascal
1.
 Reader.Value.ToString



да, так получилось
Код: pascal
1.
2.
3.
while Iterator.Next do
            begin
              sName := Reader.Value.ToString;



В статье ни слова про Reader.Value
и в справке тоже не нашел
Неужели разработчикам сложно было написать 3-7 примеров?


alekcvp, спасибо.

Если не секрет, как догадались использовать Reader.Value?
Вроде нигде такого нет в сети.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022041
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
X11
alekcvp
Код: pascal
1.
 Reader.Value.ToString




да, так получилось
Код: pascal
1.
2.
3.
while Iterator.Next do
            begin
              sName := Reader.Value.ToString;




В статье ни слова про Reader.Value
и в справке тоже не нашел
Неужели разработчикам сложно было написать 3-7 примеров?


а в исходниках покопаться слабо ?
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022042
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, если знать, что искать
тем более, там исходники, а не примеры применения
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022043
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
Если не секрет, как догадались использовать Reader.Value?
Вроде нигде такого нет в сети.

Iterator.AsString() вызывал исключение несовпадения типов, Iterator.ToString() не перекрыт, поэтому я просто посмотрел откуда Iterator.AsString() берёт значение и всё.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022052
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. это проблема в самой библиотеке?
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022062
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Т.е. надо изучать инструмент, которым собираешься пользоваться.
Есть, например, Iterator.AsValue = Reader.Value, но мне просто лень было для примера лезть так глубоко.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022064
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря, для меня здесь нет никаких ошибок

Код: pascal
1.
2.
3.
4.
function TJSONIterator.GetAsString: String;
begin
  Result := FReader.Value.AsString;
end;



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



Код: pascal
1.
sName := Iterator.AsValue.AsString;



Project raised exception class EInvalidCast with message 'Invalid class typecast'.
...
Рейтинг: 0 / 0
библиотека для сохранения/восстановления свойств компонент
    #40022072
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
X11,

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

Код: pascal
1.
2.
3.
4.
5.
6.
            while Iterator.Next do
            begin
              if Iterator.AsValue.IsType<Integer> then
                sName := Iterator.AsValue.AsInteger.ToString;  //Reader.Value.ToString;

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


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