尝试使用 TJSONObject (Delphi XE4) 解析 JSON 文件。
解析后我想销毁 TJSONObject 以防止内存泄漏,但是:
procedure TfmMain.ReadIngrJSON(const fName: string);
var i: integer;
S: TStringList;
JSONObject, innerObject: TJSONObject;
innerArray: TJSONArray;
begin
S:=TStringList.Create;
try
S.LoadFromFile(fName);
JSONObject:=TJSONObject.ParseJSONValue(S.Text) as TJSONObject;
if Assigned(JSONObject) then
begin
SetLength(ingrArray, JSONObject.Size);
for i := 0 to JSONObject.Size-1 do
begin
ingrArray[i].id:=JSONObject.Get(i).JsonString.Value;
innerObject:=JSONObject.Get(ingrArray[i].id).JsonValue as TJSONObject;
innerArray:=innerObject.Get('en').JsonValue as TJSONArray;
ingrArray[i].name[0]:=innerArray.Get(0).Value;
ingrArray[i].units[0]:=innerArray.Get(1).Value;
innerArray:=innerObject.Get('ru').JsonValue as TJSONArray;
ingrArray[i].name[1]:=innerArray.Get(0).Value;
ingrArray[i].units[1]:=innerArray.Get(1).Value;
innerArray:=nil;
end;
innerObject.Destroy;
for i := 0 to Length(ingrArray)-1 do
listIngredients.Items.Add(ingrArray[i].name[1]);
end
else
raise Exception.Create('no JSON data');
finally
JSONObject.Destroy; //here is an error 'invalid pointer operation'
S.Free;
end;
end;
我的代码有什么问题?