【问题标题】:How to convert nested Json String to Json struct in play json [duplicate]如何在play json中将嵌套的Json字符串转换为Json结构[重复]
【发布时间】:2021-04-12 11:17:24
【问题描述】:

我正在尝试使用 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}
        }
    }
}

【问题讨论】:

    标签: json scala play-json


    【解决方案1】:

    有关update 的文档,请参阅How to update a nested json using scala play framework?。在您的情况下,假设 json 字符串存储在 jsonString,因此我们对其进行解析:

    val json = Json.parse(jsonString)
    

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

    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 运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      相关资源
      最近更新 更多