如何将嵌套的 Json 字符串转换为播放中的 Json 结构 json

How to convert nested Json String to Json struct in play json

我正在尝试使用 play json 库 update 方法将嵌套的 json 字符串转换为 Json 结构。但我无法获得正确的语法。有人可以帮我吗?我在 https://www.playframework.com/documentation/2.5.x/ScalaJsonTransformers

中使用更新方法

例如:我有示例输入 json

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

预期的输出应该是:

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

有关 update 的文档,请参阅 。在您的情况下,我们假设 json 字符串存储在 jsonString,因此我们解析它:

val json = Json.parse(jsonString)

现在我们需要定义一个 reader,它将知道将路径 __ \ "key2" \ "key3" \ "key4" 处的字符串转换为 JsObject,并保持所有其他字段相同。所以我们声明这样一个 reader:

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

那么用法就很简单了:

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

代码 运行 在 Scastie