【问题标题】:How remove trailing blackslash from JSON string? [duplicate]如何从 JSON 字符串中删除尾随黑斜线? [复制]
【发布时间】: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 只是为了将其转换回TJSONValueTJSONArray 派生自 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


【解决方案1】:

你可以试试这个:

Result := FormatJSON(TempArray.ToJSON.Replace('\/', '/'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2019-01-10
    • 2018-06-05
    • 2013-07-29
    相关资源
    最近更新 更多