【问题标题】:Parsing a Json String in Scala using Play framework使用 Play 框架在 Scala 中解析 Json 字符串
【发布时间】:2015-07-29 03:45:33
【问题描述】:

我开始尝试使用 Scala 和 Play 来解析 Json 数据,并按照 https://www.playframework.com/documentation/2.3.9/ScalaJson 的教程进行操作。 现在,当我尝试运行那里给出的示例代码时:

val json: JsValue = Json.parse("""{
  "name" : "Watership Down",
  "location" : {
    "lat" : 51.235685,
    "long" : -1.309197
  },
  "residents" : [ {
    "name" : "Fiver",
    "age" : 4,
    "role" : null
  }, {
    "name" : "Bigwig",
    "age" : 6,
    "role" : "Owsla"
  } ]
}
""")

val lat = json \ "location" \ "lat"

我收到以下错误:

java.lang.NoSuchMethodError: play.api.libs.json.JsValue.$bslash(Ljava/lang/String;)Lplay/api/libs/json/JsValue;

我做错了什么?我正在使用 Scala 2.10 和 Play 2.3.9。

谢谢。

【问题讨论】:

  • JsLookupResult 是 2.4 中的新功能。你确定你使用的是 2.1 吗?
  • 2.4 对 JSON 库进行了重大更改。阅读 2.4 教程而不是古老的 2.1 教程。
  • 不知道为什么我的印象是我使用的是 2.1。无论如何,我不得不将我的版本更新到 2.3.9。但是当我尝试运行示例代码时,我仍然面临一些问题。我已经更新了我的问题。
  • 看起来我的代码在运行时仍然引用 Play 2.4。将其更新到 2.3.9 解决了该问题。谢谢。

标签: json scala playframework-2.0


【解决方案1】:

在 Play 2.4.x 中,JsLookupResult 表示特定 Json 路径上的值,可以是实际的 Json 节点,也可以是未定义的。 JsLookupResult 有两个子类:分别是 JsDefined 和 JsUndefined。

你可以修改你的代码如下:

val name: JsLookupResult = json \ "user" \ "name"

name match {
  case JsDefined(v) => println(s"name = ${v.toString}")
  case undefined: JsUndefined => println(undefined.validationError)
}

【讨论】:

  • 谢谢,但看来我必须将我的 Play 框架更新到 2.3.9。我仍然面临一些问题。我已经更新了我的问题。
  • github.com/luongbalinh/play-mongo 这是一个简单的全栈 Web 应用程序,使用 Play 2.4.2 作为端点后端,Reactivemongo 用于响应式 MongoDB 驱动程序,Guice 用于依赖注入,Spec2 和 Mockito 用于单元测试和集成测试, Frisby 用于端点测试,AngularJs、Bookstrap 和 Coffee 脚本用于前端。
  • 我该怎么办?我无法使用 Play 2.4.x。我需要使用 2.3.x。
  • 看起来我的代码在运行时仍然引用 Play 2.4。将其更新到 2.3.9 解决了该问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
相关资源
最近更新 更多