【发布时间】:2014-09-02 12:22:00
【问题描述】:
这是一个有效的json:
如何从这个string 创建一个TSuperObject?
【问题讨论】:
标签: delphi delphi-6 superobject
这是一个有效的json:
如何从这个string 创建一个TSuperObject?
【问题讨论】:
标签: delphi delphi-6 superobject
如果您在浏览器中打开readme.html,您将在该文档的最开头看到:
var
obj: ISuperObject;
begin
obj := SO('{"foo": true}');
obj := TSuperObject.ParseString('{"foo": true}');
obj := TSuperObject.ParseStream(stream);
obj := TSuperObject.ParseFile(FileName);
end;
【讨论】:
Readme.html 是您应该阅读的文件的完美名称,但如果将名称更改为 Secret-PleaseDoNotRead.html,可能会有更多人阅读。如果你反对这个向作者投诉。您还应该关注issue list,因为这就是公开的重点(处理该EIntOverflow 异常仍有一个未解决的问题)。顺便说一句,代码在 XE6 上完美运行
Delphi 6 存在一个错误。
当SO() 函数尝试转换字符串的值时,它会引发EIntOverflow。
这个bug是由于这个函数造成的:
class function TSuperAvlEntry.Hash(const k: SOString): Cardinal;
This is the bug in the google's issue tracker
错误报告者提出的解决方法是将函数更改为:
class function TSuperAvlEntry.Hash(const k: SOString): Cardinal;
var
h: cardinal;
i: Integer;
begin
h := 0;
{$Q-}
for i := 1 to Length(k) do
h := Cardinal( h*129 + ord(k[i]) + $9e370001);
Result := h;
end;
{$Q+}
【讨论】: