json4s - 简单字符串值解析失败

标签 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))))

最佳答案

正如 docs 中所述对于org.json4s.native.JsonMethods.parse():

Any valid json can be parsed into internal AST format

有效的 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,然后尝试解析它并收到此错误。

关于json4s - 简单字符串值解析失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41684944/

相关文章:

java - 如何在 servlet 中使用 GSON 解析此 JSON 字符串

python - 带有 json querydict 和消息的 Django

Scala - 将 Trait 类型作为方法参数传递

json - 使用 for 表达式从可能为空的 JSON 值中提取选项

json - 如何使用 scala 中的 json4s 库测试我为解析器创建的案例类是否正确?

python - 使用 Python(最好是请求)从 Binance API 获取 Candlestick/Kline 数据以获取 JSON Dat

json - 使用 Node.js 将 URL/路径转换为 ​​Json

Scala:在没有val的情况下分配一次变量

scala - sbt 有没有办法将编译器警告转换为错误,从而导致构建失败?

scala - 使用可变键转换 Json