如何使用json4s解析“流式”json对象?

时间:2018-02-17 10:22:40

标签: json scala json4s

我有一个流式源,可以生成许多没有分隔符的JSON对象(或者只有空格)。如果我将它传递给json4s parse函数,它只会为第一个对象生成AST。

作为一种解决方法,我可以手动解析它,并通过在适当时添加括号和逗号将其转换为JSON数组,或者将其块化并在每个块上调用parse

但是,这是rather common format,所以我确定问题已经解决了。我在json4s文档中找不到它的API。

1 个答案:

答案 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数组的新功能,无需将所有值保存在内存中。