正在销毁 delphi 中的 json 数组
Destroying json array in delphi
下面的代码造成内存泄漏。
正确的方法是什么?
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
的原始对象。
所以,简单地去掉那个 Create
调用,你不需要它。您只需要 Free
ParseJSONValue()
returns.
的对象
此外,您不需要将 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.
请查找更多详细信息和备选方案 in the amazing documentation。
下面的代码造成内存泄漏。 正确的方法是什么?
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
的原始对象。
所以,简单地去掉那个 Create
调用,你不需要它。您只需要 Free
ParseJSONValue()
returns.
此外,您不需要将 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.
请查找更多详细信息和备选方案 in the amazing documentation。