5

I started trying Scala and Play to parse through Json data, and was following the tutorial at https://www.playframework.com/documentation/2.3.9/ScalaJson. Now, when I try to run the sample code given there which is:

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"

I get the following error:

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

What am I doing wrong? I'm using Scala 2.10 and Play 2.3.9.

Thanks.

4
  • JsLookupResult is new in 2.4. Are you sure you're using 2.1? Commented Jul 29, 2015 at 4:32
  • 2.4 brought in significant changes to the JSON library. Read the 2.4 tutorial rather than the ancient 2.1 tutorial. Commented Jul 29, 2015 at 5:19
  • Not sure why I was under the impression that I was using 2.1. Anyway, I had to update my version to 2.3.9. But I'm still facing some issues when I try to run the sample code. I have updated my question. Commented Jul 29, 2015 at 7:29
  • Looks like my code was still referring to Play 2.4 for run time. Updating it to 2.3.9 resolved the problem. Thanks. Commented Jul 29, 2015 at 21:48

1 Answer 1

10

In Play 2.4.x, JsLookupResult represents the value at a particular Json path, either an actual Json node or undefined. JsLookupResult has two subclasses: JsDefined and JsUndefined respectively.

You can modify your code as the following:

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

name match {
  case JsDefined(v) => println(s"name = ${v.toString}")
  case undefined: JsUndefined => println(undefined.validationError)
}
Sign up to request clarification or add additional context in comments.

4 Comments

Thanks, but it looks like I have to update my Play framework to 2.3.9. I'm still facing some issues. I have updated my question.
github.com/luongbalinh/play-mongo This is a simple full-stack web application using Play 2.4.2 for endpoint backend, Reactivemongo for reactive MongoDB driver, Guice for dependency injection, Spec2 and Mockito for unit testing and integration testing, Frisby for endpoint testing, and AngularJs, Bookstrap and Coffee script for frontend.
What should I do with that? I cannot use Play 2.4.x. I need to use 2.3.x.
Looks like my code was still referring to Play 2.4 for run time. Updating it to 2.3.9 resolved the problem. Thanks.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.