我正在编写用于生成包装箱的Spigot插件。该JsonReader扫描宝藏库文件以查找我请求的特定设置。问题是,我不想一遍又一遍地循环复制相同的内容,所以我决定这样做。
它成功读取了前六个令牌,但在令牌第六(“ max-axis”数组停止)处停止。那里没有逗号。当我在数组中添加第四个数字时,它甚至会读取它,但由于该位置没有逗号,因此停止在该数字上。使用JsonReader.setLenient(true)
,并使用JsonWriter.setLenient(true)
写入文件。我尝试将writer设置为false。
编写此方法的方法很奇怪,但这仅用于测试。无需立即从文件中实际返回值。
PoolFile.scanDocument()
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": {}
}
]
}
EDIT 如果您想查看该应用程序,请visit the GitHub page。来源位于skycrates/src/main
答案 0 :(得分:2)
问题是由于reader.hasNext()
引起的。与其他Reader类进行比较时,此方法会产生误导。按照方法说明
/ ** *如果当前数组或对象具有另一个元素,则返回true。 * /
因此,当您使用完第一个数组中的所有元素后调用reader.hasNext()
时。它将返回false并且循环结束。要解决此问题,请将条件改为while (reader.peek() != JsonToken.END_DOCUMENT)
。