处理传入 JSONObject 的字符串
Handling String passed into JSONObject
在我的 PHP 服务器中,我将应该是编码的 JSON 对象传递到 PubNub 频道中,如下所示:
$post_data = array("type"=> "groupMessage", "data" => array("chatUser" => "SERVER", "chatMsg" => "Now lets talk", "chatTime"=>1446514201516));
$post_data = json_encode($post_data, JSON_FORCE_OBJECT);
$info = $pubnub->publish('MainChat', $post_data);
请注意,我正在使用 JSON_FORCE_OBJECT
,这应该确保 JSONObject 的输出。参考日志,输出显示为:
{"type":"groupMessage","data":{"chatUser":"SERVER","chatMsg":"Now lets talk","chatTime":1446514201516}}
但是,在客户端 Android 应用程序中,测试通道 returns 上传入消息的 class 这是一个字符串对象,而不是 JSON,并且没有通过 if (message instanceof JSONObject) {
:
Log.d("message class", message.getClass().toString());
if (message instanceof JSONObject) {
try {
JSONObject jsonObj = (JSONObject) message;
Log.d("jsonObj is ", jsonObj.toString());
JSONObject json = jsonObj.getJSONObject("data");
final String name = json.getString(Constants.JSON_USER);
Log.d("name is: ", name);
final String msg = json.getString(Constants.JSON_MSG);
Log.d("msg is: ", msg);
final long time = json.getLong(Constants.JSON_TIME);
Log.d("time is: ", String.valueOf(time) );
if (name.equals(mPubNub.getUUID())) return; // Ignore own messages
final ChatMessage chatMsg = new ChatMessage(name, msg, time);
presentActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
// Adding messages published to the channel
mChatAdapter.addMessage(chatMsg);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
如何确保 PHP 将 JSON 对象传递到通道中?
您在设备上获得的响应(消息)仍然只是一个需要转换为 JSONObject() 的字符串。
JSONObject jsonObj = new JSONObject(message);
现在可以检查它是否是 JSONObject() 的正确实例 ;)
在我的 PHP 服务器中,我将应该是编码的 JSON 对象传递到 PubNub 频道中,如下所示:
$post_data = array("type"=> "groupMessage", "data" => array("chatUser" => "SERVER", "chatMsg" => "Now lets talk", "chatTime"=>1446514201516));
$post_data = json_encode($post_data, JSON_FORCE_OBJECT);
$info = $pubnub->publish('MainChat', $post_data);
请注意,我正在使用 JSON_FORCE_OBJECT
,这应该确保 JSONObject 的输出。参考日志,输出显示为:
{"type":"groupMessage","data":{"chatUser":"SERVER","chatMsg":"Now lets talk","chatTime":1446514201516}}
但是,在客户端 Android 应用程序中,测试通道 returns 上传入消息的 class 这是一个字符串对象,而不是 JSON,并且没有通过 if (message instanceof JSONObject) {
:
Log.d("message class", message.getClass().toString());
if (message instanceof JSONObject) {
try {
JSONObject jsonObj = (JSONObject) message;
Log.d("jsonObj is ", jsonObj.toString());
JSONObject json = jsonObj.getJSONObject("data");
final String name = json.getString(Constants.JSON_USER);
Log.d("name is: ", name);
final String msg = json.getString(Constants.JSON_MSG);
Log.d("msg is: ", msg);
final long time = json.getLong(Constants.JSON_TIME);
Log.d("time is: ", String.valueOf(time) );
if (name.equals(mPubNub.getUUID())) return; // Ignore own messages
final ChatMessage chatMsg = new ChatMessage(name, msg, time);
presentActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
// Adding messages published to the channel
mChatAdapter.addMessage(chatMsg);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
如何确保 PHP 将 JSON 对象传递到通道中?
您在设备上获得的响应(消息)仍然只是一个需要转换为 JSONObject() 的字符串。
JSONObject jsonObj = new JSONObject(message);
现在可以检查它是否是 JSONObject() 的正确实例 ;)