如何从 pubnub 历史回调响应中解析数据?
How to parse data from pubnub history callback resonse?
历史回调如下所示,我需要解析Object response(message),下面给出response以供参考。Object message - params产生嵌套数组没有任何关键字和以关键字作为消息的嵌套对象。
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
如何解析此响应。
您可以使用以下代码解析您的 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();
}
}
首先,这不是有效的 JSON,也许这是您在解析它时遇到的问题。
当你得到一个有效的 json 时(你可以在这里 https://jsonlint.com/ 检查它是否是一个有效的 json),你需要先从字符串作为 json 对象,然后获取每个子对象和子对象的每个子对象,依此类推,直到获得整个对象。
您应该使用像这样的 json 解析器:http://json.parser.online.fr/ 来帮助您了解什么对象是什么
的子对象
祝你好运
历史回调如下所示,我需要解析Object response(message),下面给出response以供参考。Object message - params产生嵌套数组没有任何关键字和以关键字作为消息的嵌套对象。
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
如何解析此响应。
您可以使用以下代码解析您的 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();
}
}
首先,这不是有效的 JSON,也许这是您在解析它时遇到的问题。
当你得到一个有效的 json 时(你可以在这里 https://jsonlint.com/ 检查它是否是一个有效的 json),你需要先从字符串作为 json 对象,然后获取每个子对象和子对象的每个子对象,依此类推,直到获得整个对象。
您应该使用像这样的 json 解析器:http://json.parser.online.fr/ 来帮助您了解什么对象是什么
的子对象祝你好运