As per several QC reports,
Data.DBXJSON.TJSONString.ToString is still very broken. Which means, for all intents and purposes,
TJSONAnything.ToString is also broken. Fortunately, you can just use
TJSONAnything.ToBytes for a happy JSON outcome.
The following function will take any Delphi JSON object and convert it to a string:
function JSONToString(obj: TJSONAncestor): string; var bytes: TBytes; len: Integer; begin SetLength(bytes, obj.EstimatedByteSize); len := obj.ToBytes(bytes, 0); Result := TEncoding.ANSI.GetString(bytes, 0, len); end;
TJSONString.ToBytes escapes all characters outside U+0020-U+007F, we can assume that the end result is 7-bit clean, so we can use
TEncoding.ANSI. You could instead stream the TBytes to a file or do other groovy things with it.