json - 在 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;
我需要自己将代码添加到System
Delphi 附带的单元中吗?
解决方案
\
需要转义为,\\
因此您声称“仅删除结果中的反斜杠是行不通的,因为该值也可能是"ABC\123"
”是错误的,因为它必须是"ABC\\123"
。唯一需要转义的其他字符是"
as \"
。 /
当然不需要转义,但可以根据实现的自由裁量权进行转义。这样做并非无效。至于为什么ToString()
这样做,你得问问 Embarcadero。
如果需要,您可以轻松地对\/
into进行搜索和替换,/
而不会影响其他转义序列,例如\\
and \"
。或者,尝试使用ToJSON()
而不是ToString()
.
关于TJSONAncestor.Value()
,TJSONAncestor
是一个基类,它Value()
是一个默认virtual
返回空字符串的方法。后代类(,等)可以覆盖以返回更有意义的字符串。但是在您的示例中,您的输入字符串表示一个 JSON 对象,因此将指向一个实例,并且不会覆盖,因为用字符串表示对象没有意义。这甚至是记录在案的行为:JSONString
TJSONNumber
Value()
V
TJSONObject
TJSONObject
Value()
http://docwiki.embarcadero.com/Libraries/en/System.JSON.TJSONAncestor.Value
返回简单JSON 元素的字符串表示形式,如字符串、数字或布尔值。
对于像对象和数组这样的结构化 JSON 元素,返回空字符串。
推荐阅读
- python - 如何以不同的价格向 FTX 或 binace 发送多个订单
- .htaccess - Joomla 重写规则总是 404s
- ruby-on-rails - 尝试在我的 Rails 应用程序中添加 current_user.admin
- python-3.x - 解密 Chrome fedauth 和 rtfa cookie 时返回错误
- python - 如何通过模板将列表传递给气流?
- azure - 部署连续的 Azure WebJob 和 WebApp 块 App
- python - Python:如何增加克里金函数中的插值半径
- javascript - 为什么这个函数中的返回发生在 indexDB 返回请求的值之前?
- ios - 我无法使用 expo-media-library 访问 ios 上的音频文件
- reactjs - 无效的挂钩调用。使用反应测试库和反应查询