为了账号安全,请及时绑定邮箱和手机立即绑定

JsonReader 在数组末尾停止读取

JsonReader 在数组末尾停止读取

慕桂英3389331 2021-09-12 10:50:17
我正在编写一个 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)


查看完整回答
反对 回复 2021-09-12
  • 1 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信