3

Why the encoding works for "bla-b" but not the parsing ?

scala> import org.json4s._
import org.json4s._

scala> import org.json4s.native.JsonMethods._
import org.json4s.native.JsonMethods._

scala> import org.json4s.JsonDSL._
import org.json4s.JsonDSL._


scala> parse(compact(render("bla-b")))
org.json4s.ParserUtil$ParseException: expected field or array
Near: "bla-b"
  at org.json4s.native.JsonParser$Parser.fail(JsonParser.scala:207)
  at org.json4s.native.JsonParser$$anonfun$1.newValue$1(JsonParser.scala:155)
  at org.json4s.native.JsonParser$$anonfun$1.apply(JsonParser.scala:164)
  at org.json4s.native.JsonParser$$anonfun$1.apply(JsonParser.scala:117)
  at org.json4s.native.JsonParser$.parse(JsonParser.scala:105)
  at org.json4s.native.JsonParser$.parse(JsonParser.scala:53)
  at org.json4s.native.JsonMethods$class.parse(JsonMethods.scala:11)
  at org.json4s.native.JsonMethods$.parse(JsonMethods.scala:62)
  ... 35 elided

scala> compact(render("bla-b"))
res9: String = "bla-b"

On the other hand, this runs without errors:

scala> parse(compact(render("joco" -> "bla-b")))
res5: org.json4s.JValue = JObject(List((joco,JString(bla-b))))
jhegedus
  • 20,244
  • 16
  • 99
  • 167

1 Answers1

3

As said in docs for org.json4s.native.JsonMethods.parse():

Any valid json can be parsed into internal AST format

A valid JSON is either a collection of name/value pairs (object) or an ordered list of values (array). See this answer for more details.

bla-b is not a valid JSON. But ["bla-b"] or {"joco":"bla-b"} is a valid JSON.

For some reason org.json4s.native.JsonMethods.render() can render not only JObject or JArray but also other JValue instances like JString so it can produce invalid JSON. I suggest to ask developers about that (you already did).

So you render bla-b to invalid JSON, then you are trying to parse it and you get this error.

Community
  • 1
  • 1
mixel
  • 25,177
  • 13
  • 126
  • 165