Java JsonReader在数组末尾停止读取
我正在为产卵箱编写一个插口插件。这个JsonReader扫描宝藏池文件,查找我请求的特定设置。问题是,我不想复制同样的东西,而一次又一次地循环,所以我决定做这个 它成功读取前六个令牌,但它在令牌六处停止,此时max axis数组停止。那里没有逗号。当我向数组中添加第四个数字时,它甚至会读取它,但会在该数字处停止,因为那里没有逗号。使用JsonReader.setLenienttrue,JsonWriter.setLenienttrue用于写入文件。我试着把作者设为假的 写这个的方式很奇怪,但都是为了测试。现在不需要从文件中实际返回值 PoolFile.scanDocumentJava JsonReader在数组末尾停止读取,java,gson,Java,Gson,我正在为产卵箱编写一个插口插件。这个JsonReader扫描宝藏池文件,查找我请求的特定设置。问题是,我不想复制同样的东西,而一次又一次地循环,所以我决定做这个 它成功读取前六个令牌,但它在令牌六处停止,此时max axis数组停止。那里没有逗号。当我向数组中添加第四个数字时,它甚至会读取它,但会在该数字处停止,因为那里没有逗号。使用JsonReader.setLenienttrue,JsonWriter.setLenienttrue用于写入文件。我试着把作者设为假的 写这个的方式很奇怪,但都是
private Object scanDocument(JsonReader reader, Shell handleObj) {
reader.setLenient(true);
int retval = -2;
try {
JsonToken token = null; Object current = -5;
while (reader.hasNext()) {
token = reader.peek();
//if (token == JsonToken.END_DOCUMENT) break;
// Output while reading: 0 2 1 3 3 3
switch(token) {
case BEGIN_OBJECT: reader.beginObject(); retval = 0; break;
case BEGIN_ARRAY: reader.beginArray(); retval = 1; break;
case NAME: current = reader.nextName(); retval = 2; break;
case NUMBER: current = reader.nextDouble(); retval = 3; break;
case BOOLEAN: current = reader.nextBoolean(); retval = 4; break;
case STRING: current = reader.nextString(); retval = 5; break;
case END_ARRAY: reader.endArray(); retval = 6; break;
case END_OBJECT: reader.endObject(); retval = 7; break;
default: reader.skipValue(); retval = -1;
}
handleObj.doWithJSONObject(token, retval);
}
} catch (IOException e) { retval = -1; e.printStackTrace(); }
return retval;
}
defaultpool.json
{
"max-axis": [
50.0,
-1.0,
50.0 // It stops here.
],
"pools": [
{
"label": "test",
"items": {}
}
]
}
如果要查看应用程序,请编辑。源位于skycrates/src/main下问题是由reader.hasNext引起的。与其他Reader类相比,此方法具有很大的误导性。根据方法说明
/**
*如果当前数组或对象具有其他元素,则返回true。
*/
因此,当您在使用第一个数组中的所有元素后调用reader.hasNext时。它将返回false,循环结束。要解决此问题,请将条件更改为while reader.peek!=改为JsonToken.END_文档。问题是由reader.hasNext引起的。与其他Reader类相比,此方法具有很大的误导性。根据方法说明
/**
*如果当前数组或对象具有其他元素,则返回true。
*/
因此,当您在使用第一个数组中的所有元素后调用reader.hasNext时。它将返回false,循环结束。要解决此问题,请将条件更改为while reader.peek!=JsonToken.END_文档。你太棒了!非常感谢。你太棒了!非常感谢。