Delphi 如何通过解析json数组来创建TSuperObject实例?
这是一个有效的Delphi 如何通过解析json数组来创建TSuperObject实例?,delphi,delphi-6,superobject,Delphi,Delphi 6,Superobject,这是一个有效的json: [{"id":1, "name":"foo"}, {"id":2, "name":"bar"}] [{“id”:1,“name”:“foo”},{“id”:2,“name”:“bar”}] 如何从该字符串创建TSuperObject?如果打开浏览器内部,您将在该文档的第一个开头看到: 解析JSON数据结构 Delphi6有一个bug 当SO()函数尝试转换字符串的值时,它将引发EIntOverflow 该缺陷是由以下功能引起的: class function TSupe
json
:
[{"id":1, "name":"foo"}, {"id":2, "name":"bar"}]
[{“id”:1,“name”:“foo”},{“id”:2,“name”:“bar”}]
如何从该字符串创建TSuperObject
?如果打开浏览器内部,您将在该文档的第一个开头看到:
解析JSON数据结构
Delphi6有一个bug
当SO()
函数尝试转换字符串的值时,它将引发EIntOverflow
该缺陷是由以下功能引起的:
class function TSuperAvlEntry.Hash(const k: SOString): Cardinal;
bug报告者提出的解决方案是将函数更改为:
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+}
第一行(begin之后)引发整数溢出,因此第二行可能是这些示例不推荐使用,也可能是错误的。Readme.html
是您应该阅读的文件的完美名称,但是如果名称更改为Secret pleseednotread.html
,可能会有更多人阅读。如果你对此表示反对,请向作者投诉。您还应该关注,因为这是公开的重点(关于EIntOverflow
异常,仍然有一个未解决的问题)。顺便说一句,该代码在Xe6上运行完美,请准确定义“此代码不工作”。“它以什么方式失败?”大卫·费弗南我已经说过了。它提高了EIntOverflow。
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+}