json4s - 解析为简单的String值而失败

时间:2017-01-16 21:03:13

标签: json scala json4s

为什么编码适用于"bla-b"但不适用于解析?

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"

另一方面,这运行没有错误:

scala> parse(compact(render("joco" -> "bla-b")))
res5: org.json4s.JValue = JObject(List((joco,JString(bla-b))))

1 个答案:

答案 0 :(得分:3)

org.json4s.native.JsonMethods.parse() bla-b中所述:

  

任何有效的json都可以解析为内部AST格式

有效的JSON是名称/值对(对象)的集合或有序的值列表(数组)。有关详细信息,请参阅docs

["bla-b"]不是有效的JSON。但{"joco":"bla-b"}org.json4s.native.JsonMethods.render()是有效的JSON。

出于某种原因,JObject不仅可以呈现JArrayJValue,还可以呈现其他JString个实例,例如bla-b,因此它可以生成无效的JSON。我建议向开发人员询问(this answer)。

因此,您将noX呈现为无效的JSON,然后您尝试解析它并收到此错误。