我正在编写一个 Spigot 插件来生成板条箱。这个 JsonReader 扫描宝库文件以获取我请求的特定设置。问题是,我不想一遍又一遍地复制相同的 while 循环,所以我决定做这个。它成功读取前六个标记,但它在标记 6 处停止,“最大轴”数组在此处停止。那里没有逗号。当我将第四个数字添加到数组时,它甚至会读取它,但在该数字处停止,因为那里没有逗号。JsonReader.setLenient(true)是使用,JsonWriter.setLenient(true)用于写文件。我试过将作者设置为假。这写的方式很奇怪,但这只是为了测试。现在不需要从文件中实际返回值。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;}默认池.json{ "max-axis": [ 50.0, -1.0, 50.0 // It stops here. ], "pools": [ { "label": "test", "items": {} } ]}编辑如果您想查看该应用程序,请访问 GitHub 页面。来源位于skycrates/src/main
1 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
问题是由于reader.hasNext()
. 与其他 Reader 类相比,此方法非常具有误导性。根据方法说明
/** * 如果当前数组或对象有另一个元素,则返回 true 。*/
因此,当您reader.hasNext()
在消耗第一个数组中的所有元素后调用时。它将返回 false 并且您的循环结束。要解决此问题,请将条件更改为while (reader.peek() != JsonToken.END_DOCUMENT)
。
添加回答
举报
0/150
提交
取消