阅读Facebook回应与詹森JSON阅读器



长话短说,我有一个android应用程序,我使用cocos2dx来开发它。我正在努力将facebook好友引入游戏中。我的做法是在原生端(java)设置facebook sdk。我成功登录并拉下我的好友列表,没有任何问题。我的问题是,我需要将这些数据转发到c++端,这样我就可以访问数据并将其带入标签等。

我猜这是事情发生的一些结构:Java native - start activity, login to facebook, get friends -> STRING DATA JNI to c++ -> CPP parse JSON DATA with Jannson.

我的问题是,如果我有一个这样的样本数据:

[
    {
        "pic_square": "https://www.facebook.com/blah",
        "uid": 4654546445,
        "name": "somename"
    }
]

我可以解析它没有问题,但实际上facebook的响应是这样的:

{
    Response: responseCode: 200,
    graphObject: GraphObject{
        graphObjectClass=GraphObject,
        state={
            "data": [
                {
                    "pic_square": "https://www.facebook.com/blah",
                    "uid": 4654546445,
                    "name": "somename"
                }
            ]
        }
    }
}

并且Jansson失败说明它不是一个数组(确切的错误是"error: root不是一个数组")。不知道该怎么处理。我是否应该以某种方式解析出"data"之后的东西:然后找出正确停止的地方,或者有更好的方法。

谢谢! !

您需要做的是修改解析逻辑,首先处理包装您感兴趣的data数组的Json对象。虽然这将需要一些额外的编程,但它绝对胜过任何String操作尝试。除非你100%确定"["one_answers"]"总是回复的一部分,否则我不会对你收到的内容做任何假设。

我不熟悉Jannson,但在处理data数组之前,您将需要做一些其他的零碎工作。从教程来看,它应该看起来像这样:

// make request
text = request(url);
// decode json
root = json_loads(text, 0, &error);
// parse "Response"
json_t *response = json_object_get(root, "Response");
json_t *responseCode = json_object_get(response, "responseCode");
int responseCodeValue = json_integer_value(responseCode);
// parse "graphObject"
json_t *graphObject = json_object_get(root, "graphObject");
json_t *graphObjectClass = json_object_get(graphObject, "graphObjectClass");
json_t *state = json_object_get(graphObject, "state");
json_t *data = json_object_get(state, "data");
// iterate over the "data" array, parse the key/values etc.
for(i = 0; i < json_array_size(data); i++) {
    json_t *data = json_array_get(root, i);
}

为了这个示例,我省略了所有类型检查(您将需要自己添加这些检查)以及任何内存/变量的清理。此外,请注意任何拼写错误和/或明显的错误,因为我只是直接在浏览器中键入此内容,并没有进行任何编译或运行时检查。我相信你能自己把它们过滤出来。

我很好奇的一件事是你为什么选择了詹森?我猜是因为它同时支持Android和iOS?如果你的目标是Android,那么还有很多其他选择。例如,基本的Json支持是内置在Android框架中,但也有第三方库将Json映射到Java对象,如GSON和Jackson。

最新更新