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+}