【发布时间】:2020-05-04 20:26:02
【问题描述】:
我需要 addPair() 到 JSON 对象,其中值是尾随的黑斜线 /。结果是beeing等于:"\/"。
那么,如何去掉JSON插入的左斜杠呢?
版本:
经过StringReplace() 测试,无效。
uses
System.JSON, REST.Json;
//...
function FormatJSON(json: string): string;
var
tmpJson: TJsonValue;
begin
tmpJson := TJSONObject.ParseJSONValue(json);
Result := TJson.Format(tmpJson);
FreeAndNil(tmpJson);
end;
function xxxxxx: String;
var
TempObject: TJSONOBject;
TempArray: TJSONArray;
begin
TempObject := TJSONOBject.Create;
TempArray := TJSONArray.Create;
TempObject.AddPair('value', '/');
TempArray.AddElement(TempObject);
Result := FormatJSON(TempArray.ToJSON);
end;
【问题讨论】:
-
目前还不清楚实际问题是什么。请编辑您的问题以澄清问题,并包括您遇到问题的实际 JSON。
-
为什么要将
TJSONArray转换为string只是为了将其转换回TJSONValue?TJSONArray派生自TJOSNValue,因此只需将TJSONArray原样直接传递给TJson.Format()。此外,您的xxxxxx()函数正在泄漏TJSONArray。试试这个:function xxxxxx: String; var TempObject: TJSONObject; TempArray: TJSONArray; begin TempArray := TJSONArray.Create; try TempObject := TJSONObject.Create; try TempObject.AddPair('value', '/'); TempArray.AddElement(TempObject); except TempObject.Free; raise; end; Result := TJson.Format(TempArray); finally TempArray.Free; end; -
@RemyLebeau,感谢您通过此修复,但额外的尾随黑斜线 \ 仍然在实际值 (/) 之前插入。如何防止这种情况发生?
-
"\/"只是'/'字符的转义 形式。根据JSON spec,这是一个完全合法的转义。没有办法告诉 Embarcadero 的 JSON 框架不要转义'/'字符。话虽如此,TJson.Format()在 10.3 Rio 中已被弃用,那么您为什么要使用它呢?请改用Result := TempArray.Format();。 -
@RemyLebeau,例如在 EditThisCookie chorme 扩展上,不会发生这种情况。
标签: json delphi delphi-10.3-rio