nc-blog 首页农码生涯

Free Pascal 的 fpjson 的一个解码 bug

日期: 2021-03-13, 00:40   共 3,316 次阅读

fpjson 单元是 Free Pascal 支持 JSON 的实现,今天使用它来解析服务器传回的结果时踩了它的一个解码 bug 的坑。

我写了一个演示程序,分别用 fpjson 以及另外两个第三方的开源 JSON 单元(LkJsonJsonTools)解析同一段非常简单的 JSON 字符串的结果。

uses fpjson, LkJSON, jsontools;

procedure TForm1.Button1Click(Sender : TObject);
var
    str : String;
    js1 : TJsonObject;
    js2 : TlkJSONobject;
    js3 : TJsonNode;
begin
    str := '{"name":"\u95e8\u88ab\u8111\u5b50\u6324\u574f\u4e86"}';
    js1 := GetJson(str) as TJsonObject;
    js2 := TlkJSON.ParseText(str) as TlkJSONobject;
    js3 := TJsonNode.Create;
    js3.Parse(str);
    ShowMessage(
        js1.Get('name', '') + #13#10#13#10 +
        js2.getString('name') + #13#10#13#10 +
        js3.Find('name').AsString
    );
    js3.Free;
    js2.Free;
    js1.Free;
end;

运行结果如下图所示,第一行是 fpjson 解析的有问题的字符串,后两行是另外两个解析的结果——显然都正确处理了:

演示工程放在 Github 了,也附带了另外的那两个开源 JSON 单元,其中的 LkJson 单元我修改了一些 bug,与原始版本(超过 10年没有修改过了)有些微差异。

简短地址:http://ncblog.net/1832/
«
»
暂时没有评论

评论已关闭

Trackback url | Rss 2.0