Страница 1 из 2
		
			
				Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 14:32:51 GAMER
				- Код: Выделить всё
- 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;
?
 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 16:06:07 iskander
				TJSONData это же просто класс, верно?
Стало быть достаточно со всей строгостью ему сказать: "Free"!
UPD: в данном примере
- Код: Выделить всё
- jObject.Free;
 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 16:32:15 GAMER
				jData , jArray указывают куда-то. Оставлять?
			 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 16:47:37 iskander
				jObject в своих потрохах прячет хеш-таблицу, и когда вы делаете
- Код: Выделить всё
- jObject.Add('Directions', jArray);
он помещает jArray в эту таблицу и впоследствии освобождает сам. А jData в данном примере указывает на jObject.
 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 18:21:49 sts
				одно только jData := GetJSON(... намекает (возвращает экземпляр класса который создает внутри) что пользоваться этой либой не стоит.
автор либы не в курсе базовых правил, типа кто создал тот и освобождает, удивлен что такое вообще еще существует
			 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 18:27:16 iskander
				Автор либы(этой и множества других) - Michael Van Canneyt. Все претензии к нему. 

 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 18:45:07 sts
				такие либы лучше на самоуничтожающихся интерфейсых объектах делать, задача и так не быстрая и дополнительный оверхед интерфейсов погоду не сделают, помнится пользовался SUPERObjects или както так
			 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 19:06:48 iskander
				sts писал(а):такие либы лучше на самоуничтожающихся интерфейсых объектах делать,
Могу только подсказать, как достучаться до Михаэля: заходите на багтрекер FPC(или лучше на Free Pascal mailing list) и расскажите всё это там.
 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 19:12:28 sts
				судя по тому что в исходниках я не нашел GetJSON, ему это быстро объяснили
			 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 19:16:37 iskander
				sts писал(а):судя по тому что в исходниках я не нашел GetJSON
Модуль FpJson, строка 794. 

 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 19:21:55 sts
				у меня чет нету lazarusfpc2.2.4sourcepackagesfcl-jsonsrcfpjson.pp 
- Код: Выделить всё
- 793 constructor TJSONFloatNumber.Create(AValue: TJSONFloat);
 794 begin
 795  FValue:=AValue;
 796 end;
 
Добавлено спустя 4 минуты 17 секунд:хаха, действительно в 3.0.2 есть, это еще и свежак
 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 19:29:30 iskander
				sts писал(а):lazarusfpc2.2.4
ОМГ.
 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 19:30:03 sts
				это конечно жопа
Добавлено спустя 4 минуты 35 секунд:
там парсер сам объекты создает
			 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 19:47:23 GAMER
				А потом хоть чистит? Или он только jObject : TJSONObject; создает?
			 
			
		
			
				Re: Правильная очистка памяти при работе с JSON
				
Добавлено: 
13.11.2020 20:03:24 sts
				да чистит
Добавлено спустя 1 минуту 15 секунд:
а самый первый надо самому удалять