通过Dictionary对象解析Json响应

时间:2018-07-31 10:18:12

标签: json facebook unity3d facebook-graph-api

我通过Facebook API收到Json的回复,如下所示:

enter image description here

现在我想解析这些数据,以便可以在游戏中使用。为此,我编写了以下代码:

 public void OnChallengesButtonClick ()
 {
     SoundManager.Instance.PlayButtonClickSound ();

     FB.API ("/me/friends", HttpMethod.GET, RetrieveFacebookFriends);
 }

 public void RetrieveFacebookFriends (IGraphResult result)
 {
     if (!string.IsNullOrEmpty (result.Error)) {
         Debug.Log ("ERROR: " + result.Error);
         return;
     }

     IDictionary<string,object> friendsDict = result.ResultDictionary;

     Debug.Log ("raw: " + result.RawResult);
 }

那么如何通过Dictionary对象从可用的Json响应中提取名称 ID 数据?

2 个答案:

答案 0 :(得分:0)

基本上,您应该创建一个类来对对象进行序列化/反序列化:

class FBResponse
  FBDataResponse data;

class FBDataResponse
  string name;
  string id;

在这里查看我的回复以获取更多详细信息(在“最终编辑”部分之后): Converting arrays of arrays to json

创建这两个类并使用它们反序列化FB响应应该很容易。请记住,您的变量将需要与Facebook的json响应匹配相同的名称(例如,您不能调用data data1)。

有了对象之后,就可以轻松地用它来做想要的事情了……并且有了对象,您应该可以再次获取json。

PS。 Unity默认的json序列化器不支持Dictionary,这就是为什么需要序列化两个对象的原因。如果您不希望这样做,则应尝试使用其他库。

答案 1 :(得分:0)

我认为这就是我所需要的:JSON with Unity

friends = (List<object>)(((Dictionary<string, object>)friendsH) ["data"]);
if(friends.Count > 0) {
    var friendDict = ((Dictionary<string,object>)(friends[0]));
    var friend = new Dictionary<string, string>();
    friend["id"] = (string)friendDict["id"];
    friend["first_name"] = (string)friendDict["first_name"];
}

在我无法从Facebook找到此帖子之前。