sts писал(а):одно только jData := GetJSON(... намекает (возвращает экземпляр класса который создает внутри) что пользоваться этой либой не стоит.
Никаких правил это не нарушает. Да, лучше было бы в названии функции добавить Create, но все равно это ИМХО. Можно и так. Такое разрешается, если экземпляр класса возвращается как результат функции. Но вот если экземпляр класса создается внутри функции или процедуры, переданной через параметр (а такое я встречал, к сожалению), вот это крайне некрасиво получается.
Либа fcl-json вполне себе работоспособная и прозрачная
Добавлено спустя 2 минуты 28 секунд:
P.S. по очистке памяти JSON @iskander все верно ответил топикстартеру, добавить нечего
Добавлено спустя 10 минут 13 секунд:
Разве что могу дать совет, который гипотетически может пригодиться. Бывают случаи, когда после включения экземпляра класса TJSONData в другой JSON объект или массив, может возникнуть задача, что с "включенным" объектом придется работать отдельно и мы не можем гарантировать, что работа не продолжится после очистки корневого объекта. Так как после очистки корневого объекта очищаются все "встроенные" в него экземпляры, то в таком случае можно посоветовать использовать функцию Clone (которая, о, ужас, также возвращает в качестве результата функции сгенерированный объект). Пример:
// add a new sub-array
jArray := TJSONArray.Create;
jArray.Add('North');
jArray.Add('South');
jArray.Add('East');
jArray.Add('West');
jObject.Add('Directions', jArray.Clone);
Обращаем внимание на последнюю строчку в коде: функция Clone создает копию объекта jArray (именно полноценную копию, а не ссылку!), в результате после уничтожения jObject.Free очистится копия jArray. С самим же jArray можно будет работать отдельно и потом обязательно также уничтожить jArray.Free