我有一个流式源,可以生成许多没有分隔符的JSON对象(或者只有空格)。如果我将它传递给json4s parse
函数,它只会为第一个对象生成AST。
作为一种解决方法,我可以手动解析它,并通过在适当时添加括号和逗号将其转换为JSON数组,或者将其块化并在每个块上调用parse
。
但是,这是rather common format,所以我确定问题已经解决了。我在json4s文档中找不到它的API。
答案 0 :(得分:1)
如果您从InputStream
阅读,请使用BufferedInputStream
包装,mark()
,read()
和reset()
调用,以跳过parse()
之间的空格{1}}致电:
val in = new BufferedInputStream(new FileInputStream("/tmp/your.json"))
try {
var continue = true
in.mark(1)
do {
in.reset()
// <-- here should be call for parse
// skip white spaces or exit if EOF found
var b = 0
do {
in.mark(1)
b = in.read()
if (b < 0) continue = false
} while (Character.isWhitespace(b))
} while (continue)
} finally in.close()
编辑:今天我发布了0.11.0 version of jsoniter-scala,具有解析流式JSON值或JSON数组的新功能,无需将所有值保存在内存中。