我目前正在处理一些JSON,显然遇到了一点麻烦。我有一个PHP页面,同时获取两个不相关的MySQL请求并显示它们,一个接一个。我有两种JSON编码。我的问题是,我无法让我的Java程序识别第二个。第一个解析得很好。
我通过在线验证器运行JSON,很明显这两个不应该像现在这样遵循。处理这两者的正确方法是什么?
请注意,它们之间的逗号(第11行)是手动添加的,因为我认为它会有所帮助。没有。
{
"player_update":[
{
"id":"16",
"name":"Phil_TEST",
"last_login":"2015-10-12 00:36:05",
"for_update":"00:00:00",
"newplayer":"no"
}
]
},
{
"player_list":[
{
"id":"16",
"name":"Phil_TEST",
"last_login":"2015-10-12 01:00:42"
},
{
"id":"15",
"name":"Phil8",
"last_login":"2015-10-12 00:50:49"
}
]
}
编辑:这是我使用的代码。我可以很好地解析player_update,但是在我要求找到player_list之后,什么也不做,我的日志就停在那里了。Test 00和Test 1都不显示
JSONObject obj = new JSONObject(stream);
JSONArray arr_player_update = obj.getJSONArray("player_update");
String newplayer = arr_player_update.getJSONObject(0).getString("newplayer");
Log.i("PhLog LobbyActivity", "Newplayer : "+newplayer);
Log.i("PhLog LobbyActivity", "Test 0");
JSONArray arr_player_list = obj.getJSONArray("player_list");
Log.i("PhLog LobbyActivity", "Test 00");
for (int i = 0; i < arr_player_list.length(); i++) {
String id = arr_player_list.getJSONObject(i).getString("id");
String name = arr_player_list.getJSONObject(i).getString("name");
String last_login = arr_player_list.getJSONObject(i).getString("last_login");
}
json_encode($array1);echo",";json_encode($array2);但是逗号是没有用的。也许如果我的JSON是有效的,那么它会更好地工作。
Logcat:
10-12 09:48:00.086 1052-1052/? I/PhLog LobbyActivity: Newplayer : no
10-12 09:48:00.086 1052-1052/? I/PhLog LobbyActivity: Test 0
10-12 09:48:00.086 1052-1052/? W/System.err: org.json.JSONException: No value for player_list
问题:
你编码JSON的方式是错误的。这不是一个有效的JSON格式数据的例子。你可以在这里检查它的有效性。
解决方案:
您有两个不同的数组作为响应发送。然后将它们合并成一个数组,然后以json格式进行编码。
示例:(在你的php文件中)
$ data_to_send =数组();
$ data_to_send [' player_update '] = $ player_update;//一个数组的播放器更新
$ data_to_send [' player_list '] = $ player_list;//player_list
json_encode ($ data_to_send);//发送响应