fpjson 单元是 Free Pascal 支持 JSON 的实现,今天使用它来解析服务器传回的结果时踩了它的一个解码 bug 的坑。
我写了一个演示程序,分别用 fpjson 以及另外两个第三方的开源 JSON 单元(LkJson 和 JsonTools)解析同一段非常简单的 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年没有修改过了)有些微差异。
|