gpt4 book ai didi

java - JsonReader 在数组末尾停止读取

转载 作者:行者123 更新时间:2023-11-29 04:16:14 27 4
gpt4 key购买 nike

我正在为生成 crate 编写一个 Spigot 插件。此 JsonReader 扫描宝藏池文件以查找我请求的特定设置。事情是,我不想一遍又一遍地复制相同的 while 循环,所以我决定做这个。

它成功读取了前六个标记,但它在标记 6 处停止,“最大轴”数组在此处停止。那里没有逗号。当我向数组添加第四个数字时,它甚至会读取它,但停在该数字处,因为那里没有逗号。使用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;
}

默认池.json

{
"max-axis": [
50.0,
-1.0,
50.0 // It stops here.
],
"pools": [
{
"label": "test",
"items": {}
}
]
}

编辑 如果您想查看该应用程序,visit the GitHub page .源位于 skycrates/src/main

最佳答案

问题是由于reader.hasNext()。与其他 Reader 类相比,此方法具有误导性。按照方法说明

/** * Returns true if the current array or object has another element. */

因此,当您在消耗完第一个数组中的所有元素后调用 reader.hasNext() 时。它将返回 false 并且您的循环结束。要解决此问题,请将条件更改为 while (reader.peek() != JsonToken.END_DOCUMENT)

关于java - JsonReader 在数组末尾停止读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52250346/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com