在delphi中销毁json数组



下面的代码创建内存泄漏。正确的方法是什么?

JSONArray := TJSONArray.Create;
try
JSONArray :=
TJSONObject.ParseJSONValue(
TEncoding.UTF8.GetBytes(
'[{"username":"admin"},{"username":"developer"}]'
), 0
) as TJSONArray;
finally
JSONArray.Free;
end;

问题是对TJSONArray.Create的调用。你正在创建你自己的TJSONArray对象,然后覆盖JSONArray指针指向一个完全不同的TJSONArray对象,泄漏你Create'd的原始对象。

所以,简单地摆脱Create调用,你不需要它。您只需要FreeParseJSONValue()返回的对象。

同样,您不需要将JSON字符串转换为字节。ParseJSONValue()有一个接受string作为输入的过载。

试试这个:

JSONArray := TJSONObject.ParseJSONValue(
'[{"username":"admin"},{"username":"developer"}]'
) as TJSONArray;
try
// ...
finally
JSONArray.Free;
end;

只是作为提供的有效解决方案的替代方案,但使用mORMot。更简单,更干净,避免内存泄漏:

program Project1;
{$APPTYPE CONSOLE}
uses
Syncommons;
var Json : TDocVariantData;
begin
Json.InitJSon('[{"username":"admin"},{"username":"developer"}]');
// Testing
assert(Json.Kind = dvArray);
assert(Json.Count = 2);
assert(TDocVariantData(Json.Values[1]).U['username'] = 'developer');
end.

请在惊人的文档中找到更多的细节和替代方案。

相关内容

  • 没有找到相关文章

最新更新