I was initialising a TJSONArray
as:
jsonArray := xeroResponse.JSONValue as TJSONArray;
but I had forgotten to free the TRESTResponse
. Now that I'm doing that, the jsonArray
is being freed as well.
I use the jsonArray
throughout the Form to run multiple endpoints. So I want to create it in the Form's OnCreate
event so nothing else owns it. Then I can use it as much as I need and then free it in the Form's OnDestroy
event.
How do I assign the xeroResponse.JSONValue
to an already created TJSONArray
?
And where I am using the TJSONArray
, I would like to create the TJSONObject
I am using, so that I can free it directly, as I won't be freeing the jsonArray
(at that point). I was doing:
jObject := jsonArray[x] as TJSONObject;
How do I assign the jsonArray[x]
to an already created TJSONObject
?
How do I assign the
xeroResponse.JSONValue
to an already createdTJSONArray
?
You can't.
Reading from TRESTResponse.JSONValue
creates a new TJSONValue
-derived object when it parses the response data, and that object is freed when the TRESTResponse
is freed. You can't change that process, and you can't take ownership of that object.
So, if you want to keep the parsed JSON object after freeing the TRESTResponse
, you will have to make a deep copy of the object.
Otherwise, don't use TRESTResponse.JSONValue
to begin with. Use TRESTReponse.JSONText
instead and parse it yourself, such as with TJSONObject.ParseJSONValue()
. Then you will have ownership of the object it returns.
And where I am using the
TJSONArray
, I would like to create theTJSONObject
I am using, so that I can free it directly, as I won't be freeing thejsonArray
(at that point). I was doing:jObject := jsonArray[x] as TJSONObject;
How do I assign the
jsonArray[x]
to an already createdTJSONObject
?
You can't do that, either. When the JSON is parsed and creates a new TJSONArray
, the parser will also create new objects for the array elements, too.
In short, you can't supply your own pre-created objects to the JSON parser. If that is what you want, then you need to re-think your approach.