首页 > 解决方案 > 在 Delphi 中用斜杠解析 JSON

问题描述

我从带有斜杠的 WebService 接收 JSON 字符串。

当我解析它们时,Delphi 添加了反斜杠。

V := TJSONObject.ParseJSONValue( '{"Kode":"ABC/123" }') ;

V.ToString returns :  {"Kode":"ABC\\/123"}

在 Delphi 中解析 JSON 字符串的最佳实践是什么?

为什么函数V.Value总是返回一个空字符串?

在单元System.JSON中,我看到以下代码:

function TJSONAncestor.Value: string;
begin
  Result := '';
end;

我需要自己将代码添加到SystemDelphi 附带的单元中吗?

标签: jsonparsingdelphi

解决方案


\需要转义为,\\因此您声称“仅删除结果中的反斜杠是行不通的,因为该值也可能是"ABC\123"”是错误的,因为它必须是"ABC\\123"唯一需要转义的其他字符是"as \"/当然不需要转义,但可以根据实现的自由裁量权进行转义。这样做并非无效。至于为什么ToString()这样做,你得问问 Embarcadero。

如果需要,您可以轻松地对\/into进行搜索和替换,/而不会影响其他转义序列,例如\\and \"。或者,尝试使用ToJSON()而不是ToString().

关于TJSONAncestor.Value(),TJSONAncestor是一个基类,它Value()是一个默认virtual返回空字符串的方法。后代类(,等)可以覆盖以返回更有意义的字符串。但是在您的示例中,您的输入字符串表示一个 JSON 对象,因此将指向一个实例,并且不会覆盖,因为用字符串表示对象没有意义。这甚至是记录在案的行为:JSONStringTJSONNumber Value()VTJSONObjectTJSONObjectValue()

http://docwiki.embarcadero.com/Libraries/en/System.JSON.TJSONAncestor.Value

返回简单JSON 元素的字符串表示形式,如字符串、数字或布尔值。

对于像对象和数组这样的结构化 JSON 元素,返回空字符串。


推荐阅读