delphixsuperobject

How To collect values from JSON response using XsuperObject


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.


Solution

  • 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;