【问题标题】:Play: How to remove the fields without value from JSON and create a new JSON with them播放:如何从 JSON 中删除没有值的字段并使用它们创建新的 JSON
【发布时间】:2014-08-22 04:06:52
【问题描述】:

鉴于以下 JSON:

{
  "field1": "value1",
  "field2": "",
  "field3": "value3",
  "field4": ""
}

如何获得两个不同的 JSON,一个包含有值的字段,另一个包含没有值的字段?下面是最终结果的样子:

{
  "field1": "value1",
  "field3": "value3"
}

{
  "field2": "",
  "field4": ""
}

【问题讨论】:

  • 仅仅循环并构建两个新对象还不够吗?

标签: json scala playframework play-json


【解决方案1】:

你也可以在一个班轮中做到这一点:

val (js1, js2) = j.fields.partition(_._2 != JsString(""))
println(JsObject(js1))
println(JsObject(js2))

代码运行在Scastie

【讨论】:

    【解决方案2】:

    您可以使用分区函数改进@nietaki 解决方案。

    import play.api.libs.json._
    
    val ls =
      ("field1", JsString("value1")) ::
        ("field2", JsString("")) ::
        ("field3", JsString("value3")) ::
        ("field4", JsString("")) ::
        Nil
    
    val js0 = new JsObject(ls)
    
    def withoutValue(v: JsValue) = v match {
      case JsNull => true
      case JsString("") => true
      case _ => false
    }
    
    val (js1, js2) = js0.fields.partition(t => withoutValue(t._2))
    JsObject(js1)
    JsObject(js2)
    

    【讨论】:

      【解决方案3】:

      您可以访问 JSON 对象的字段作为(String, JsValue) 对的序列,并且可以过滤它们。您可以过滤出有值和没有值的,并使用过滤后的序列构造新的JsObject 对象。

      import play.api.libs.json._
      
      val ls =
        ("field1", JsString("value1")) ::
        ("field2", JsString("")) ::
        ("field3", JsString("value3")) ::
        ("field4", JsString("")) ::
        Nil
      
      val js0 = new JsObject(ls)
      
      def withoutValue(v: JsValue) = v match {
        case JsNull => true
        case JsString("") => true
        case _ => false
      }
      
      val js1 = JsObject(js0.fields.filterNot(t => withoutValue(t._2)))
      val js2 = JsObject(js0.fields.filter(t => withoutValue(t._2)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多