JsonReader 在数组末尾停止读取

我正在编写一个 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


慕桂英3389331
浏览 173回答 1
1回答

慕尼黑8549860

问题是由于reader.hasNext(). 与其他 Reader 类相比,此方法非常具有误导性。根据方法说明/** * 如果当前数组或对象有另一个元素,则返回 true 。*/因此,当您reader.hasNext()在消耗第一个数组中的所有元素后调用时。它将返回 false 并且您的循环结束。要解决此问题,请将条件更改为while (reader.peek() != JsonToken.END_DOCUMENT)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java