2017-09-08 75 views
0

從JSON響應值我想用xSuperObject解析這個JSON:如何收集使用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 
        } 
       }] 
      } 
     } 
    } 
} 

這裏是我的代碼:

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。

+0

因爲我通過搞清楚你的​​JSON結構的額外的努力去(因爲它是既格式化*和*不完整),我已經編輯成你的問題,以便沒有人需要。但是,請以我們可以在將來快速測試它的方式提供。因爲現在我浪費了我的時間,不得不通過一個不相關的錯字來刪除我的答案。當我們不得不比你付出更多的努力時是不公平的。 –

回答

2

您正試圖直接跳到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;