这个旅程从一条来自服务器的消息开始,它变成了一个字符串,最初看起来是这样的:
/713.105.135.149:54969: [{"row 0":[{},{},{},{},{},{},{},{}]},{"row 1":[{},{},{},{},{},{},{},{}]},{"row 2":[{},{},{},{},{},{},{},{}]},{"row 3":[{},{},{},{},{},{},{},{}]},{"row 4":[{},{},{},{},{},{},{},{}]},{"row 5":[{"column 0":"WhitePawn"},{},{},{},{},{},{},{}]},{"row 6":[{},{},{},{},{},{},{},{}]},{"row 7":[{},{},{},{},{},{},{},{}]}]
然后我会截断所有无效的JSON,比如message.substring(message.indexOf("["));
之后,我使用下面的代码JSONArray jsonArray = new JSONArray(trimmed);
将它转换为JSONarray
随后,我想要对其进行索引,我可以像这样做jsonArray.get(4);
但是这将返回{"row 4":[{"column 0":"WhitePawn"},{},{},{},{},{},{},{}]}
,而我实际需要的是WhitePawn
。
问题是jsonArray.get(4)
只给了我一个JSONObject
,而我认为我需要/想要的是另一个JSONArray
,所以我可以再次索引它,就像JSONArray subArray = jsonArray.get(0);
一样,问题是,这不起作用。
如何才能使jsonArray.get(4)
的结果返回或转换为我可以再次索引的内容?
完整的代码如下所示:
private void parseMessageRedrawBoard(String message) throws Exception {
Log.d("0000: ", message);
String trimmed = message.substring(message.indexOf("["));
Log.d("1111: ", trimmed);
JSONArray jsonArray = new JSONArray(trimmed);
//"column 0"
Object subArray = jsonArray.get(4);
Log.d("YES: ", subArray.toString());
}
发布于 2018-10-14 05:45:14
剧透提醒,JSONArray subArray = jsonArray.getJSONArray(4);
不工作了,就这么多了!
但这行得通..。
private void parseMessageRedrawBoard(String message) throws Exception {
Log.d("0000: ", message);
String trimmed = message.substring(message.indexOf("["));
Log.d("1111: ", trimmed);
JSONArray jsonArray = new JSONArray(trimmed);
//"column 0"
JSONObject subObject = jsonArray.getJSONObject(4);
JSONArray result = subObject.getJSONArray("row 4");
Log.d("YES: ", result.get(0).toString());
}
感谢@Andreas的提示!
https://stackoverflow.com/questions/52797565
复制相似问题