0

I am trying to use play json library update method to convert nested json string to Json struct. But I am not able to get syntax correct. can someone please help me with this? I am using update method in https://www.playframework.com/documentation/2.5.x/ScalaJsonTransformers

Ex: I have sample input json

{
    "key1": "value",
    "key2": {
        "key3": {
            "key4": "{\"value1\":100, \"value2\":200}"
        }
    }
}

The expected output should be:

{
    "key1": "value",
    "key2": {
        "key3": {
            "key4": {"value1":100, "value2":200}
        }
    }
}
0

1 Answer 1

0

Please see How to update a nested json using scala play framework? for the documentation of update. In your case, let's assume that the json string is stored at jsonString, so we parse it:

val json = Json.parse(jsonString)

Now we need to define a reader, that will know to convert the string at path __ \ "key2" \ "key3" \ "key4" into a JsObject, and remain all other fields the same. So we declare such a reader:

val jsPath = JsPath \ "key2" \ "key3" \ "key4"
implicit val reads: Reads[JsObject] = jsPath.json.update(__.read[JsString].map{o => Json.parse(o.value)})

Then the usage is pretty easy:

val result = json.validate[JsObject] match {
  case JsSuccess(value, _) =>
    println(value)
  case JsError(errors) =>
    println(errors)
}

Code run at Scastie.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.