Davon abgesehen, kannst du ggf. ein paar Schritte sparen.
Das folgende gilt für die mir vorliegende Delphi Tokyo Version, kann in späteren Ausgaben also anders aussehen.
Du holst dir vom RestResponse per Property JSONValue den geparsten JSON-Text als TJSONValue-Instanz.
Wie wir sehen, wird dafür den Inhalt von TCustomRESTResponse.Content erstmal geparst und die TJSONValue-Instanz konstruiert.
Delphi-Quellcode:
function TCustomRESTResponse.GetJSONValue: TJsonValue;
var
LTemp: Boolean;
begin
Result := nil;
if Content <> '' then
try
GetJSONResponse(Result, LTemp);
except
// This method ignores exceptions
end;
end;
Das wird dann innerhalb von TCustomRESTResponse.GetJSONResponse und tiefer in TJSONObject.ParseJSONValue und TJSONObject.ParseValue entsprechend komplexer, aufwendiger und speicherintensiv.
Dann nimmst du die TJSONValue-Instanz und rufst die ToString Methode auf.
Also um das gerade geparste Objekt wieder zu einen String zu konvertieren (Moment, was?).
Ich nehme an, wir kommen da in TJSONArray.ToString raus und erzeugen uns hier per TStringBuilder den Rückgabe-String.
Ich schlage vor, du versuchst mal folgende zwei Möglichkeiten:
1) Direkte Nutzung von RESTResponse1.Content
Delphi-Quellcode:
var
JSONArray: TJSONArray;
JValueAsString: string;
JValueAsBytes: TBytes;
begin
JValueAsString := RESTResponse.Content;
JValueAsBytes := TEncoding.UTF8.GetBytes(JValueAsString);
JSONArray := TJSONObject.ParseJSONValue(JValueAsBytes, 0) as TJSONArray;
end;
2) Direkte Nutzung von RESTResponse1.RawBytes
Delphi-Quellcode:
var
JSONArray: TJSONArray;
JValueAsBytes: TBytes;
begin
JValueAsBytes := RESTResponse1.RawBytes;
JSONArray := TJSONObject.ParseJSONValue(JValueAsBytes, 0) as TJSONArray;
end;
Ich bin mir an der Stelle nicht sicher, wie sich das da mit dem Encoding verhält.
Ihr konvertiert ja nicht ohne Grund explizit nach UTF-8.
Aber so als Startpunkt für weitere Optimierung ist das vielleicht schon eine gute Ausgangsbasis.