2017-10-04 57 views
2

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

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 

如何解析这个响应。

+0

的可能的复制[如何解析JSON(HTTPS的孩子://计算器.com/questions/2591098/how-to-parse-json) – Selvin

回答

5

您可以使用下面的代码

呼叫parseJson()successCallback方法内部解析您的JSON,并通过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(); 
    } 
} 
+2

谢谢@ akhilesh0707 – Raj

0

第一所有这些都不是有效的JSON,也许这是解析它的麻烦。

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

你应该使用一些JSON解析器像这样的:http://json.parser.online.fr/以帮助您了解的对象是什么

好运

+0

如果您删除了Raj添加的用于理解数据的意见,那么它是有效的JSON。尽管如此,它在历史回应中并未如此描述。 –