【问题标题】:How to parse data from pubnub history callback resonse?如何从 pubnub 历史回调响应中解析数据?
【发布时间】:2017-10-04 10:10:38
【问题描述】:

历史回调如下所示,我需要解析下面给出的响应以供参考的对象响应(消息)。对象消息 - 产生没有任何关键字的嵌套数组和关键字为的嵌套对象的参数消息。

pubnub.history(request_id, true, 100, new Callback() {
        @Override
        public void successCallback(String channel, Object message) {
            super.successCallback(channel, message);
            Log.e(TAG, "successCallback: History Messages" + message);
        }

        @Override
        public void errorCallback(String channel, PubnubError error) {
            super.errorCallback(channel, error);
            Log.e(TAG, "successCallback: History Messages error" + error);
        }
    });

这是我的对象响应消息。

回应:-

 [                              //array 1
   [                            // array 2
    {                          //obj 1
     "message":{
     "message":"Hai",
     "timestamp":1507105493379,
     "type":"SENT",
     "userId":137
     },
     "timetoken":15071054937865507
     },
     {                           //object 2
     "message":{
     "message":"How are you ?",
     "timestamp":1507105503320,
     "type":"SENT",
     "userId":137
     },
     "timetoken":15071055037143632
     },
     {                                  //object 3
     "message":{
     "message":"Fyn",
     "timestamp":1507105505628,
     "type":"SENT",
     "userId":137
     },
     "timetoken":15071055060355900
     }
     ],                                   //array 1 end
    15071054937865507,
    15071055060355900
  ] 

                                  //array 2 end

如何解析此响应。

【问题讨论】:

标签: android pubnub


【解决方案1】:

您可以使用以下代码解析您的 JSON

在您的 successCallback 方法中调用 parseJson() 并传递 message.toString() 以解析方法,如下所示:

public void successCallback(String channel, Object message) {
  super.successCallback(channel, message);
  Log.e(TAG, "successCallback: History Messages" + message);
  parseJson(message.toString());
}

JsonParse 方法:

private void parseJson(String jsonStr) {
    try{
        JSONArray jsonArray = new JSONArray(jsonStr);
        JSONArray innerJsonArray = jsonArray.getJSONArray(0);
        for(int i = 0; i < innerJsonArray.length(); i++) {
            JSONObject jsonObject = innerJsonArray.getJSONObject(i);
            JSONObject jsonObjectMessage = jsonObject.getJSONObject("message");
            String msg = jsonObjectMessage.getString("message");
            //TODO you can get all other fields 
        }
    }catch (JSONException e){
        e.printStackTrace();
    }
}

【讨论】:

  • 谢谢@akhilesh0707
【解决方案2】:

首先这不是一个有效的 JSON,也许这是你在解析它时遇到的问题。

当你得到一个有效的 json 时(你可以在这里检查它是否是一个有效的 json https://jsonlint.com/),你需要首先将它从一个字符串转换为一个 json 对象,然后获取每个孩子和每个一个孩子的孩子等等,直到你得到整个对象。

你应该使用像这样的一些 json 解析器:http://json.parser.online.fr/ 来帮助你理解什么对象是什么的孩子

祝你好运

【讨论】:

  • 如果您删除 Raj 添加的 cmets,这是有效的 JSON,他这样做是为了理解数据。不过,历史的回应中并没有以这种方式呈现。
猜你喜欢
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多