Delphi XE DBX 序列化Json的bug

探讨 Delphi 在不同版本中对 JSON 数据序列化的处理差异,特别是对特殊字符如双引号和斜杠的转义问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

delphi XE Update1 15.0.3953.35171

序列化一个阵列,如下:

procedure TForm1.Button2Click(Sender: TObject);
var
  vObject:TJsonObject;
  vPair:TJsonPair;
begin
  vObject:=TJsonObject.Create();
  vPair:=TJsonPair.Create('Name','A"B\''C中国');
  vObject.AddPair(vPair);
  Edit1.Text:=vObject.ToString;
end;

得到的结果为:{"Name":"A"B\'C中国"}

很明显结果是错的,双引号没有转义。查找代码,发现是这个地方的错误: 

DBXJSON.pas
function TJSONString.ToString: UnicodeString;
begin
  if FStrBuffer <> nil then
    Exit('"' + FStrBuffer.ToString + '"');
  Result := NullString;
end;

居然QuotedStr函数都没有用,更别谈斜杠的转义。

在Delphi XE2 update 3 16.0.4358.45540 版本,发现代码修改了:

function TJSONString.ToString: UnicodeString;
begin
  if FStrBuffer <> nil then
    Exit('"' + AnsiReplaceStr(FStrBuffer.ToString, '"', '\"') + '"');
  Result := NullString;
end;

这次把引号转义了,但是还有问题:如果里面本身已经有斜杠了,难道不用转义??哎,头继续大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火星牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值