使用SuperObject访问JSON数组

3

我最近从使用ULKJson切换到SuperObject,并且一直在查看该软件包附带的示例,已经在大部分内容上有了一些进展,但似乎遇到了一些问题。更具体地说,我无法找到一个示例来显示如何访问类似于下面示例中的数组中的项。

{
  "name": "John Smith",
  "tel": 555-5555,
  "age": 18,
  "height": 1.8,
  "place": [{"address": "PO Box 1234", "city": "Florida", "code": 2000},
            {"address": "1 Sparrow street", "city": "Florida", "code": 2000}]
}

为了访问常规项目,我使用以下代码,看起来可以正常工作。

procedure TForm1.Button1Click(Sender: TObject);
var
  SO : ISuperObject;
  age, height, tel : Integer;
  name : String;
begin
  SO := TSuperObject.ParseFile('JSON.txt',true);
  name := SO.S['name'];
  age := SO.I['age'];
  tel := SO.I['tel'];
  height := SO.I['height'];

  Memo1.Lines.Clear;

  Memo1.Lines.Add('Name: ' + name);
  Memo1.Lines.Add(#10#13);

  Memo1.Lines.Add('Age: ' + age);
  Memo1.Lines.Add(#10#13);

  Memo1.Lines.Add('Telephone: ' + tel);
  Memo1.Lines.Add(#10#13);

  Memo1.Lines.Add('Height: ' + height);
  Memo1.Lines.Add(#10#13);
end;

然而,我不确定如何访问Place数组中的项目,我相信我只是忽略了一些简单的东西,但我在演示中找不到任何示例来展示如何访问这些数据,希望这里的一位专家可以提供一些帮助或者至少指引我学习的指南。


当提供的示例无法编译时,指南帮助甚微。 - avue
这不是一段完整的代码,而是一组展示如何完成基本操作的示例。它不应该被编译。此外,“将不会编译”并不能说明你所写的内容。 - TLama
是你标记了我的初始评论以便删除吗?如果是,为什么?因为示例集对你来说无法编译或其他原因吗? - TLama
是的,我标记了该回复,因为它并没有真正回答问题。在SO上,人们经常使用RTFM(读手册)回复,这实际上是一种假设,暗示OP在第一时间没有尝试独自解决问题,特别是当他们提供的示例清楚地表明他们至少对相关材料有基本的理解时。事实上,示例在我的情况下无法工作与此无关,所以要回答你的问题……是和否。 - avue
好的,我已经试图指向你明显错过的一组示例。而且你没有展示出任何尝试使用数组的迹象。你只是展示了你知道的并要求其他的部分。此外,你下面的“不用在意”反应毫无意义。相反,你应该发布自己的答案。 - TLama
1个回答

7
我会简单地这样做:

我的方式是:

var
  location:ISuperObject;
begin
   for location in SO['place'] do
      Memo1.Lines.Add(location.S['address']); //etc.
   end;
end;

正如TLama所建议的那样,这份简短指南确实是一个学习的好资源。


for..in枚举仅适用于D2005及以上版本。我正在使用Delphi 7,那么等效的代码是什么? - avue
没事了,我用low()和high()解决了问题,虽然看起来有点丑,但是它能正常工作。 - avue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接