Circe - jawn.ParseException при разборе ответа Elasticsearch - PullRequest
0 голосов
/ 04 апреля 2019

Я застрял с ошибкой при анализе ответа json упругого поиска с circe . Ниже мой код.

  def dropLeadingChars: Pipe[F, Byte, Byte] = {
    def go(origStr: Stream[F, Byte], beginning: Boolean) : Pull[F, Byte, Unit] = {
      logger.info(s"origStr inside dropLeadingChars -> $origStr")
      origStr
      .pull
      .unconsN(if (beginning) 1 else CHUNK_SIZE, true)
      .flatMap{
        case Some((Chunk.Bytes(chunk, _, _), str)) if beginning && !chunk.headOption.contains('[') =>
          Pull.output(Chunk.empty) >> go(str, true)
        case Some((seg, str)) =>
          logger.info(s"inside some seg is ${seg.toString} and str is $str")
          Pull.output(seg) >> go(str, false)
        case None => Pull.done
      }
    }
    in => go(in, true).stream
  }

val res2: Stream[F, String] = httpClient.getQueryStream(headers, subject.indexName, query, { resp =>
  resp
    .body
    .through(dropLeadingChars)
    .dropLastIf(_ == '}')
    .dropLastIf(_ == '}')
    .chunks
    .unwrapJsonArray
    .map{ json =>
      json.as[Hit].fold(
        err => s"Invalid json: $err for payload $json\n",
        hit => {
          logger.info(s"hit -> $hit")
          val instance = hit._source.instance
          logger.info(s"instnace -> $instance")
          JsonNormalizer.normalizeOld(instance) ++ "\n"
        }
      )
    }
})

Ошибка, которую я получаю,

"stack_trace":"org.typelevel.jawn.ParseException: expected true got 'text/p...' (line 1, column 2)
at org.typelevel.jawn.Parser.die(Parser.scala:132)at org.typelevel.jawn.Parser.die(Parser.scala:91)
at org.typelevel.jawn.Parser.parseTrue(Parser.scala:327)
at org.typelevel.jawn.Parser.parseTop(Parser.scala:390)
at org.typelevel.jawn.Parser.parse(Parser.scala:359)
at org.typelevel.jawn.AsyncParser.churn(AsyncParser.scala:227)
at org.typelevel.jawn.AsyncParser.absorb(AsyncParser.scala:87)
at org.typelevel.jawn.AsyncParser.absorb(AsyncParser.scala:91)
at jawnfs2.Absorbable$$anon$4.absorb(Absorbable.scala:32)
at jawnfs2.Absorbable$$anon$4.absorb(Absorbable.scala:30)
at jawnfs2.package$$anonfun$jawnfs2$package$$go$1$1.apply(package.scala:41)
at jawnfs2.package$$anonfun$jawnfs2$package$$go$1$1.apply(package.scala:39)
at fs2.Pull$$anonfun$flatMap$extension$1.apply(Pull.scala:60)
at fs2.Pull$$anonfun$flatMap$extension$1.apply(Pull.scala:60)
...