Solltest du an dieser Stelle nicht einen Clone des TJSONValue verwenden?
Delphi-Quellcode:
if HasValue( AJSONObject, AName) and not HasValue( AJSONObject, AName + cXDataRef) then
// dann neuer Eintrag mit ref anhängen
AJSONObject.AddPair( AName + cXDataRef, AJSONObject.Values[ AName]);
Immerhin wird das Pair aus dem der Value stammt ja direkt danach freigegeben:
Delphi-Quellcode:
if HasValue( AJSONObject, AName) then
AJSONObject.RemovePair( AName).Free; // <=== hier nach ist der Zugriff auf AJSONObject nicht mehr möglich, da gelöscht.
Mir stellt sich überhaupt die Frage: Wieso änderst du nicht einfach den Namen des Pairs von
AName auf
AName + cXDataRef?
Bei CheckIDValue verwendest du einen string als Speicher für den Value-Inhalt, deswegen gibt es dort kein Problem.