Warm tip: This article is reproduced from serverfault.com, please click

scala-播放:如何从JSON中删除无值的字段并使用它们创建新的JSON

(scala - Play: How to remove the fields without value from JSON and create a new JSON with them)

发布于 2014-07-01 14:35:11

给定以下JSON:

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

如何获得两种不同的JSON,一种包含包含值的字段,另一种包含没有值的字段?以下是最终结果的外观:

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

{
  "field2": "",
  "field4": ""
}
Questioner
j3d
Viewed
11
nietaki 2014-07-01 23:56:55

你可以按序列(String, JsValue)对的方式访问JSON对象的字段,并且可以对它们进行过滤。你可以过滤掉有值和无值的对象,并使用过滤后的序列构造新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)))