如何从 Java 文件中读取许多 json 对象?

Posted

技术标签:

【中文标题】如何从 Java 文件中读取许多 json 对象?【英文标题】:How can I read MANY json objects from a file in Java? 【发布时间】:2014-06-25 20:07:28 【问题描述】:

JsonReader reader 对应的方法遵循“对于一个 reader 实例,该方法只需要调用一次”的规则。是否有任何标准工具可以从流中读取直到结束?

【问题讨论】:

好东西!关于第一个选项。出于技术原因,我想留在 JSR-353 中。关于第二个。是否保证 InputStream 会记住上次读取它的位置?事实上它应该,但它是否在任何文档中明确说明? (把我的cmets转给一个答案) 【参考方案1】:

您可以围绕同一个InputStream / Reader 重复构造多个JsonReaders。只要您不在流上做任何其他事情并且只要解析器没有提前读取,每个后续的解析器都应该从最后一个停止的地方开始。请注意,它是否可以提前读取是未定义的,并且可能是特定于实现的。另请注意,解析器实现通常会关闭给定的流/读取器,您可能需要使用阻止关闭的简单流/读取器包装器来抑制这种情况,如下所示:

Json.createReader(new NoCloseInputStream(myInputStream));

否则,请尝试不同的解析器。我有一个FOSS JSON parser,它可以读取我网站上的离散对象流。

另外,JsonReader 的文档说 read() 方法需要只被调用一次;它并没有说必须只调用一次,因此值得尝试反复调用read() 以查看它是否有效。 没关系;如果多次调用 readreadObjectreadArrayclose 方法中的任何一个,这些方法被记录为抛出 IllegalStateException

【讨论】:

“另请注意,解析器实现通常会关闭给定的流/读取器”。它肯定会引发异常,但不会引发关闭流。 javax.json.stream.JsonParsingException: Unexpected char 1 096 at (line no=1, column no=1, offset=0)

以上是关于如何从 Java 文件中读取许多 json 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 appsettings.json 文件中的对象数组中读取值

如何从单个文件中读取不同的模式 json 对象并将其保存到表中

如何从 Python 中的文件/流中懒惰地读取多个 JSON 值?

java语言如何循环读取Map对象内的数据

java ArrayList 如何读取文件中的数据,并且搜索

如何从配置文件中读取嵌套对象的值