【问题标题】:PlayFramework: how to transform each element of a JSON arrayPlayFramework:如何转换 JSON 数组的每个元素
【发布时间】:2015-05-09 03:34:22
【问题描述】:

鉴于以下 JSON...

{
  "values" : [
     "one",
     "two",
     "three"
  ]
}

...如何在 Scala/Play 中像这样转换它?

{
  "values" : [
     { "elem": "one" },
     { "elem": "two" },
     { "elem": "three" }
  ]
}

【问题讨论】:

    标签: scala playframework


    【解决方案1】:

    Play's JSON Transformers 很容易:

    val json = Json.parse(
      """{
        |  "somethingOther": 5,
        |  "values" : [
        |     "one",
        |     "two",
        |     "three"
        |  ]
        |}
      """.stripMargin
    )
    
    // transform the array of strings to an array of objects
    val valuesTransformer = __.read[JsArray].map {
      case JsArray(values) =>
        JsArray(values.map { e => Json.obj("elem" -> e) })
    }
    
    // update the "values" field in the original json
    val jsonTransformer = (__ \ 'values).json.update(valuesTransformer)
    
    // carry out the transformation
    val transformedJson = json.transform(jsonTransformer)
    

    【讨论】:

      【解决方案2】:

      您可以使用 Play 的 JSON API:

      import play.api.libs.json._
      
      val json = Json parse """
          {
            "values" : [
               "one",
               "two",
               "three"
            ]
          }
        """
      
      val newArray = json \ "values" match {
        case JsArray(values) => values.map { v => JsObject(Seq("elem" -> v)) }
      }
      
      // or Json.stringify if you don't need readability
      val str = Json.prettyPrint(JsObject(Seq("values" -> JsArray(newArray))))
      

      输出:

      {
        "values" : [ {
          "elem" : "one"
        }, {
          "elem" : "two"
        }, {
          "elem" : "three"
        } ]
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-09
        • 2017-09-30
        • 1970-01-01
        • 1970-01-01
        • 2018-05-16
        • 1970-01-01
        • 2017-04-23
        • 1970-01-01
        相关资源
        最近更新 更多