0

我想使用 xSuperObject 解析这个 JSON:

{
    "data": {
        "user": {
            "edge_followed_by": {
                "count": 29594,
                "page_info": {
                    "has_next_page": true,
                    "end_cursor": ""
                },
                "edges": [{
                    "node": {
                        "id": "224289647",
                        "username": "h9a",
                        "full_name": "",
                        "profile_pic_url": "",
                        "is_verified": false,
                        "followed_by_viewer": false,
                        "requested_by_viewer": false
                    }
                }]
            }
        }
    }
}

这是我的代码:

var
  json : ISuperObject;
  item, item2 : IMember;
begin
  json := TSuperObject.Create(Memo1.Text);
  for item in json['edges'].AsArray do
  begin
    Memo2.Lines.Add(item.AsObject['node.username'].ToString);
  end;
end;

我想从 JSON 中收集所有用户名值,但我的代码引发了 AccessViolation。

4

1 回答 1

3

您正在尝试直接跳转到edges数组,而无需先遍历其父元素。您希望的阵列的实际位置是data.user.edge_followed_by.edges

它应该更像这样工作......

var
  Obj: ISuperObject;
  Arr: ISuperArray;
  Itm: IMember;
begin
  Obj:= SO(Memo1.Lines.Text);
  Arr:= Obj.O['data'].O['user'].O['edge_followed_by'].A['edges'];
  for Itm in Arr do begin
    Memo2.Lines.Add(Itm.AsObject.O['node'].S['username']);
  end;
end;
于 2017-09-08T23:54:05.140 回答