How To collect values from JSON response using XsuperObject

824 Views Asked by At

I want to parse this JSON using xSuperObject:

{
    "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
                    }
                }]
            }
        }
    }
}

Here is my code:

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;

I want to collect all username values from the JSON, but my code raises an AccessViolation.

1

There are 1 best solutions below

0
Jerry Dodge On BEST ANSWER

You are attempting to jump straight to the edges array without first stepping through its parent elements. The actual location of the array you wish is at data.user.edge_followed_by.edges.

It should work more like this...

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;