Java JsonReader在数组末尾停止读取

Java JsonReader在数组末尾停止读取,java,gson,Java,Gson,我正在为产卵箱编写一个插口插件。这个JsonReader扫描宝藏池文件,查找我请求的特定设置。问题是,我不想复制同样的东西,而一次又一次地循环,所以我决定做这个 它成功读取前六个令牌,但它在令牌六处停止,此时max axis数组停止。那里没有逗号。当我向数组中添加第四个数字时,它甚至会读取它,但会在该数字处停止,因为那里没有逗号。使用JsonReader.setLenienttrue,JsonWriter.setLenienttrue用于写入文件。我试着把作者设为假的 写这个的方式很奇怪,但都是

我正在为产卵箱编写一个插口插件。这个JsonReader扫描宝藏池文件,查找我请求的特定设置。问题是,我不想复制同样的东西,而一次又一次地循环,所以我决定做这个

它成功读取前六个令牌,但它在令牌六处停止,此时max axis数组停止。那里没有逗号。当我向数组中添加第四个数字时,它甚至会读取它,但会在该数字处停止,因为那里没有逗号。使用JsonReader.setLenienttrue,JsonWriter.setLenienttrue用于写入文件。我试着把作者设为假的

写这个的方式很奇怪,但都是为了测试。现在不需要从文件中实际返回值

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": {}
        }
    ]
}
如果要查看应用程序,请编辑。源位于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_文档。

你太棒了!非常感谢。你太棒了!非常感谢。