【问题标题】:json4s - parsing fails for simple String valuejson4s - 简单字符串值解析失败
【发布时间】:2017-01-16 21:03:13
【问题描述】:

为什么编码适用于"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))))

【问题讨论】:

    标签: json scala json4s


    【解决方案1】:

    正如docs 中所说的org.json4s.native.JsonMethods.parse()

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

    有效的 JSON 是名称/值对(对象)的集合或值的有序列表(数组)。详情请见this answer

    bla-b 不是有效的 JSON。但["bla-b"]{"joco":"bla-b"} 是有效的JSON。

    由于某种原因,org.json4s.native.JsonMethods.render() 不仅可以渲染JObjectJArray,还可以渲染其他JValue 实例,例如JString,因此它可以生成无效的JSON。我建议向开发人员询问 (you already did)。

    因此,您将bla-b 渲染为无效的 JSON,然后您尝试解析它并收到此错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      相关资源
      最近更新 更多