Общие вопросы программирования, алгоритмы и т.п.
Модератор: Модераторы
GAMER
энтузиаст
Сообщения: 627 Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:
Сообщение
GAMER » 13.11.2020 13:32:51
Код: Выделить всё
uses fpjson, jsonparser; procedure JSONTest; var jData : TJSONData; jObject : TJSONObject; jArray : TJSONArray; s : String; begin // this is only a minimal sampling of what can be done with this API // create from string jData := GetJSON('{"Fld1" : "Hello", "Fld2" : 42, "Colors" : ["Red", "Green", "Blue"]}'); // output as a flat string s := jData.AsJSON; // output as nicely formatted JSON s := jData.FormatJSON; // cast as TJSONObject to make access easier jObject := TJSONObject(jData); // retrieve value of Fld1 s := jObject.Get('Fld1'); // change value of Fld2 jObject.Integers['Fld2'] := 123; // retrieve the second color s := jData.FindPath('Colors[1]').AsString; // add a new element jObject.Add('Happy', True); // add a new sub-array jArray := TJSONArray.Create; jArray.Add('North'); jArray.Add('South'); jArray.Add('East'); jArray.Add('West'); jObject.Add('Directions', jArray); end;Пример взят с
https://wiki.freepascal.org/fcl-json Как правильно очистить
jData : TJSONData; jObject : TJSONObject; jArray : TJSONArray;
?
iskander
энтузиаст
Сообщения: 627 Зарегистрирован: 08.01.2012 18:43:34
Сообщение
iskander » 13.11.2020 15:06:07
TJSONData это же просто класс, верно?
Стало быть достаточно со всей строгостью ему сказать: "Free"!
UPD: в данном примере
GAMER
энтузиаст
Сообщения: 627 Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:
Сообщение
GAMER » 13.11.2020 15:32:15
jData , jArray указывают куда-то. Оставлять?
iskander
энтузиаст
Сообщения: 627 Зарегистрирован: 08.01.2012 18:43:34
Сообщение
iskander » 13.11.2020 15:47:37
jObject в своих потрохах прячет хеш-таблицу, и когда вы делаете
он помещает jArray в эту таблицу и впоследствии освобождает сам. А jData в данном примере указывает на jObject.
sts
энтузиаст
Сообщения: 519 Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти
Сообщение
sts » 13.11.2020 17:21:49
одно только jData := GetJSON(... намекает (возвращает экземпляр класса который создает внутри) что пользоваться этой либой не стоит. автор либы не в курсе базовых правил, типа кто создал тот и освобождает, удивлен что такое вообще еще существует
iskander
энтузиаст
Сообщения: 627 Зарегистрирован: 08.01.2012 18:43:34
Сообщение
iskander » 13.11.2020 17:27:16
Автор либы(этой и множества других) - Michael Van Canneyt. Все претензии к нему.
sts
энтузиаст
Сообщения: 519 Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти
Сообщение
sts » 13.11.2020 17:45:07
такие либы лучше на самоуничтожающихся интерфейсых объектах делать, задача и так не быстрая и дополнительный оверхед интерфейсов погоду не сделают, помнится пользовался SUPERObjects или както так
iskander
энтузиаст
Сообщения: 627 Зарегистрирован: 08.01.2012 18:43:34
Сообщение
iskander » 13.11.2020 18:06:48
sts писал(а): такие либы лучше на самоуничтожающихся интерфейсых объектах делать,
Могу только подсказать, как достучаться до Михаэля: заходите на багтрекер FPC(или лучше на Free Pascal mailing list) и расскажите всё это там.
sts
энтузиаст
Сообщения: 519 Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти
Сообщение
sts » 13.11.2020 18:12:28
судя по тому что в исходниках я не нашел GetJSON, ему это быстро объяснили
iskander
энтузиаст
Сообщения: 627 Зарегистрирован: 08.01.2012 18:43:34
Сообщение
iskander » 13.11.2020 18:16:37
sts писал(а): судя по тому что в исходниках я не нашел GetJSON
Модуль FpJson, строка 794.
sts
энтузиаст
Сообщения: 519 Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти
Сообщение
sts » 13.11.2020 18:26:12
у меня чет нету lazarusfpc2.2.4sourcepackagesfcl-jsonsrcfpjson.pp
Код: Выделить всё
793 constructor TJSONFloatNumber.Create(AValue: TJSONFloat); 794 begin 795 FValue:=AValue; 796 end;Добавлено спустя 4 минуты 17 секунд: хаха, действительно в 3.0.2 есть, это еще и свежак
iskander
энтузиаст
Сообщения: 627 Зарегистрирован: 08.01.2012 18:43:34
Сообщение
iskander » 13.11.2020 18:29:30
sts писал(а): lazarusfpc2.2.4
ОМГ.
sts
энтузиаст
Сообщения: 519 Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти
Сообщение
sts » 13.11.2020 18:34:38
это конечно жопаДобавлено спустя 4 минуты 35 секунд: там парсер сам объекты создает
GAMER
энтузиаст
Сообщения: 627 Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:
Сообщение
GAMER » 13.11.2020 18:47:23
А потом хоть чистит? Или он только jObject : TJSONObject; создает?
sts
энтузиаст
Сообщения: 519 Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти
Сообщение
sts » 13.11.2020 19:04:39
да чиститДобавлено спустя 1 минуту 15 секунд: а самый первый надо самому удалять