2011-04-15 59 views
1

我剛剛發現,使用FQL方法由facebook返回的JSON數據具有與由facebook圖形API返回的JSON不同的格式。如何處理這個JSON數據?

例如:

FQL <> GRAPH 

uid <> id 

work_history <> work 

education_history <> education 

另外的字段名稱和對象的在陣列中的結構是不同的。

我使用FQL和GRAPH爲我的網站。因爲我不想製作2個Facebook用戶類。我決定只使用圖形api。

我正在嘗試獲取al用戶的朋友列表,其中包括工作和教育數據。

我不知道,如果你需要我的代碼,但如果你需要它來解決我的問題,那就是: (JSON字符串我想處理更加下文)

public static List<FbUser> getFriends(string id, string token) 
{ 

    //get all id's of friends 
    string jsonUrl = graphUrl + "/" + id + "/friends?access_token=" + token; 
    var json = new WebClient().DownloadString(jsonUrl); 
    FbUserList useridlist = JsonConvert.DeserializeObject<FbUserList>(json); 

    //get all data of friends 
    jsonUrl = graphUrl + "?ids=" + useridlist.getIds() + "&access_token=" + token; 
    json = new WebClient().DownloadString(jsonUrl); 
    List<FbUser> userlist = JsonConvert.DeserializeObject<List<FbUser>>(json.Insert(0,"[") + "]"); 
    return userlist; 

} 

useridlist的.cs

public class FbUserList 
{ 
    private List<FbObject> _data; 

public List<FbObject> data 
{ 
    get 
    { 
     return _data; 
    } 
    set 
    { 
     _data = value; 
    } 
} 

public string getIds() 
{ 
    string result = ""; 
    foreach (FbObject o in _data) { 
     result += o.id + ","; 
    } 
    string test = result.Substring(0, result.Length - 1); 
    return test; 
} 
} 

在此之後,在JSON變量,我得到了以下數據:

[{"505757632":{"id":"505757632","name":"Cecilia demo","first_name":"Cecilia", ....}, 
    {"507493765":{"id":"507493765","name":"Bjorn demo","first_name":"Bjorn", .....} 
    , ... ] 

我不知道如何從這些數據中獲得用戶對象列表。 一個用戶對象具有如下字段:id,name,first_name,...所以我需要擺脫纏繞在我的用戶對象周圍的附加對象。

任何幫助非常感謝!

+1

反序列化爲字典,然後從字典中獲取值? – 2011-04-15 12:57:31

回答

5

翹曲用戶記錄的對象是一個字典。

class FbUser() 
{ 
    public string id { get;set;} 
    public string name { get;set;} 
    public string first_name { get;set;} 
    .... a property name for every data element in the returned record. 
} 


Dictionary<string,FbUser> userlist = JsonConvert.DeserializeObject<Dictionary<string,FbUser>(); 

如果你確實需要數據作爲列表,你可以做類似的事情。

List<FbUser> userlist = JsonConvert.DeserializeObject<Dictionary<string,FbUser>().Values.ToList<FbUser>(); 
+0

謝謝!這正是我需要的! – ThdK 2011-04-15 13:10:11

+1

哦,你的答案只有一個小的錯字: 列表 userlist = JsonConvert.DeserializeObject >(json).Values.ToList (); – ThdK 2011-04-15 19:16:10

+0

謝謝你的擡頭。情報已經寵壞了我。 – 2011-04-17 15:20:13