我目前正在处理一些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之后什么也没做,我的Logs就在那里停止了。测试00和测试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");
}
我的PHP页面包括: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
答案 0 :(得分:0)
问题:
编码JSON的方式是错误的。这不是有效JSON格式数据的示例。您可以检查其有效性here。
解决方案:
您有两个不同的数组作为响应发送。然后首先将它们组合在单个数组中,然后以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); //发送回复