如何从 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
重复构造多个JsonReader
s。只要您不在流上做任何其他事情并且只要解析器没有提前读取,每个后续的解析器都应该从最后一个停止的地方开始。请注意,它是否可以提前读取是未定义的,并且可能是特定于实现的。另请注意,解析器实现通常会关闭给定的流/读取器,您可能需要使用阻止关闭的简单流/读取器包装器来抑制这种情况,如下所示:
Json.createReader(new NoCloseInputStream(myInputStream));
否则,请尝试不同的解析器。我有一个FOSS JSON parser,它可以读取我网站上的离散对象流。
另外, 没关系;如果多次调用 JsonReader
的文档说 read()
方法需要只被调用一次;它并没有说必须只调用一次,因此值得尝试反复调用read()
以查看它是否有效。read
、readObject
、readArray
或 close
方法中的任何一个,这些方法被记录为抛出 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 值?