2013-02-21 1 views
0

Facebook 용 FQL 멀티 쿼리 구문 분석에 문제가 있습니다. 나는 결과에서 동일한 이름을 가진 JSONArray를 어떻게 처리 할 필요가 있는지 모른다 -> fql_result_set. 여기 내가 가진 FQL JSON이있다.Java에서 Facebook FQL Multiquery 구문 분석

{ 
"data": [ 
{ 
    "name": "query1", 
    "fql_result_set": [ 
    { 
     "uid": uid1, 
     "eid": eid1, 
     "rsvp_status": "attending" 
    }, 
    { 
     "uid": uid2, 
     "eid": eid2, 
     "rsvp_status": "attending" 
    }, 
    { 
     "uid": uid3, 
     "eid": eid3, 
     "rsvp_status": "attending" 
    } 
    ] 
}, 
{ 
    "name": "query2", 
    "fql_result_set": [ 
    { 
     "uid": uid1, 
     "name": "name1", 
     "pic_square": "pic1" 
    }, 
    { 
     "uid": uid2, 
     "name": "name2", 
     "pic_square": "pic2" 
    }, 
    { 
     "uid": uid3, 
     "name": "name3", 
     "pic_square": "pic3" 
    } 
    ] 
} 
] 
} 

여기 내가 지금 자바 코드에서 얻은 내용이 있지만 아무런 답례는 없습니다. 내가 얻은 데이터는 결국 ArrayList에 저장됩니다.

try { 
      GraphObject go = response.getGraphObject(); 
      JSONObject jso = go.getInnerJSONObject(); 
      JSONArray data = jso.getJSONArray("data"); 
      for(int i = 0; i < data.length(); i++){ 
       JSONObject o1 = data.getJSONObject(i); 
       JSONArray rs1 = o1.getJSONArray("fql_result_set"); 
       for(int j = 0; j < rs1.length(); j++){ 
        JSONObject rso1 = rs1.getJSONObject(j); 
        String uid = rso1.getString("uid"); 
        String eid = rso1.getString("eid"); 
        String rsvp = rso1.getString("rsvp_status"); 
       } 
       JSONObject o2 = data.getJSONObject(i); 
       JSONArray rs2 = o2.getJSONArray("fql_result_set"); 
       for(int k = 0; k < rs2.length(); k++){ 
        JSONObject rso2 = rs2.getJSONObject(k); 
        String name = rso2.getString("name"); 
        String pic = rso2.getString("pic_square"); 
       } 

      } 
} catch (JSONException e) { 
      e.printStackTrace(); 
     } 

아무도 내가이 JSON 결과를 구문 분석해야하는 방법을 알고 있습니까? 미리 감사드립니다.

이 시점에서 용액 OBJ

try { 
      people = new ArrayList<Person>(); 
      GraphObject go = response.getGraphObject(); 
      JSONObject jso = go.getInnerJSONObject(); 
      JSONArray data = jso.getJSONArray("data").getJSONObject(0) 
        .getJSONArray("fql_result_set"); 
      JSONArray data2 = jso.getJSONArray("data").getJSONObject(1) 
        .getJSONArray("fql_result_set"); 


      for (int i = 0; i < data.length(); i++) { 
       Person p = new Person(); 
       JSONObject o1 = data.getJSONObject(i); 
       uid = o1.getString("uid"); 
       p.setUserId(uid); 
       p.setRsvp_status(o1.getString("rsvp_status")); 


       for (int j = 0; j < data2.length(); j++) { 
        JSONObject o2 = data2.getJSONObject(j); 
        if (p.getUserId().equals(o2 
          .getString("uid"))) { 
         p.setName(o2.getString("name")); 
         p.setPic(o2.getString("pic_square")); 
        } 
       } 
       people.add(p); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

답변

0
// assign the whole result to a JSON Object 
JSONObject result = whatever-variable-name 

// get 'data' JSONArray 
JSONArray array = result.getJSONArray('data') 

// loop 
for(i = 0; i < array.length(); i++) { 
JSONObject obj = array.getJSONObject(i); 
** 
name = obj.getString('name'); 
} 

**는 "name": "query1", "fql_result_set": [ { "uid": uid1, "eid": eid1, "rsvp_status": "attending" }, { "uid": uid2, "eid": eid2, "rsvp_status": "attending" }, { "uid": uid3, "eid": eid3, "rsvp_status": "attending" } ]

namequery1query2 또는 루프 횟수에 따라 값을 갖는다. 지금까지 사용 된 방법으로 fql_result_set": [ { "uid": uid1, "eid": eid1, "rsvp_status": "attending" }, { "uid": uid2, "eid": eid2, "rsvp_status": "attending" }, { "uid": uid3, "eid": eid3, "rsvp_status": "attending" } ] GLHF에 액세스 할 수 있습니다!

0

이 시도 :

String strEvents = new JSONArray(apiResponse).getJSONObject(0).toString(); 
String strVenues= new JSONArray(apiResponse).getJSONObject(1).toString(); 
jsonArray = new JSONObject(strEvents).getJSONArray("fql_result_set"); 
jsonVenues = new JSONObject(strVenues).getJSONArray("fql_result_set");