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}
        }
    }
}
Tomer Shetah
  • 8,413
  • 7
  • 27
  • 35
Rohan Nayak
  • 233
  • 4
  • 14

1 Answers1

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.

Tomer Shetah
  • 8,413
  • 7
  • 27
  • 35