Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.07.2022, 06:53
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию JSON "out of memory" при попытке добавить вторую пару

Delphi XE4, библиотека Data.DBXJSON, собственно код:
Код:
procedure TForm1.FormDblClick(Sender: TObject);
var i: Word;
 jsonDB, jBuf: TJSONObject;  arrBuf: TJSONArray;
 buf: TStringList;
begin
  arrBuf:= TJSONArray.Create;
  for i:= 0 to grdParts.RowCount -1 do
  begin
    jBuf:= TJSONObject.Create;
    jBuf.AddPair('name', grdParts.Cells[0,i]);  //grdParts: TStringGrid
    jBuf.AddPair('size', grdParts.Cells[1,i]);
    arrBuf.AddElement(jBuf);
  end;
  jsonDB.Create(TJSONPair.Create('parts', arrBuf));
  buf:= TStringList.Create;
  buf.Text:= jsonDB.ToString;
  jsonDB.Free;
  buf.SaveToFile('DB_save.json');
  buf.Free;
end;
Первая пара ('name') добавляется нормально, на второй ('size') вылетает "out of memory". То же самое происходит при добавлении второго элемента в массив (в jBuf одна пара).
Самое странное что аналогичный код в пробном проекте работает нормально:
Код:
procedure TForm1.FormDblClick(Sender: TObject);
var i, j: Integer;  buf: TJSONObject; arrBuf: TJSONArray; s: string;
begin
 arrBuf:= TJSONArray.Create;
 MyJSON:= TJSONObject.Create;  //глобально
 for i := 0 to StringGrid1.RowCount - 1 do
 begin
   buf:= TJSONObject.Create;
   for j := 1 to StringGrid1.ColCount - 1 do
   begin
     buf.AddPair('opt'+IntToStr(j),TJSONNumber.Create(StringGrid1.Cells[j,i]));
   end;
   arrBuf.AddElement(TJSONObject.Create(TJSONPair.Create(StringGrid1.Cells[0,i],buf)));
 end;
 MyJSON.AddPair('Фигня',arrBuf);
 MyList.Text:= MyJSON.ToString;
 MyJSON.Free;
 MyList.SaveToFile('000.json'); {}
end;
Ну т.е. понятно что хоть и аналогичный, но есть какая-то разница из-за которой и вылетает ошибка. Что не так сообразить не могу
Ответить с цитированием
  #2  
Старый 05.07.2022, 10:31
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию

Всем большое спасибо за ответы.
Проблема решилась(???) сменой платформы на Win64.
Впрочем такое решение мне не очень то нравится, совершенно не понятно в чем же была причина и не появится ли эта проблема снова при увеличении количества записей.
Подозреваю что Data.DBXJSON еще сырая, по сравнению с System.DBXJSON в 10.3 "Rio"

Последний раз редактировалось Помидоркин, 05.07.2022 в 10:36.
Ответить с цитированием
  #3  
Старый 05.07.2022, 18:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,064
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Очень похоже, что действительно сырая.
Особенно с учетом того, что, вроде, видел в списке фиксов в патчах что-то об этом.
А тебе именно из DBXJSON нужно?
В доке, вроде, основным указан модуль System.JSON. Попробуй его...
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Помидоркин (06.07.2022)
  #4  
Старый 06.07.2022, 09:03
Аватар для Помидоркин
Помидоркин Помидоркин вне форума
Начинающий
 
Регистрация: 07.10.2012
Адрес: Дедовск
Сообщения: 110
Версия Delphi: Rio 10.3
Репутация: 10
По умолчанию

То-то и оно что в System DBXJSON перенесли только с 10.3 Rio, может чуть раньше, но в XE4 он точно в Data. Ну и ясен пень переносом дело не ограничивалось, у меня, например, нету форматирования, а в System.DBXJSON оно есть.
Впрочем уже не важно, вроде с SuperObject разобрался, буду на нем делать.
Ответить с цитированием
  #5  
Старый 06.07.2022, 17:23
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,064
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Хм...
Вообще, по моему опыту, лучше проапгрейдиться до 10.3, а лучше до 10.4. Вроде самые стабильные и максимально безбажные на данный момент.
11-ю сам еще не пробовал, тут сказать ничего не могу...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter