2014-02-09 2 views
2

Я использую начало класса 2 для воспроизведения в/из POSO (простой старый объект scala) и строки json.play 2 json suppress empty elements

на преобразование записи toJson, я хочу, чтобы пустые POSO-валы (строки и списки) даже не отображались в строке json ... как это сделать?

ответ

2

Вы можете добавить неявную функцию omitEmpty довольно легко.

implicit class RichJsObject(original: JsObject) { 
    def omitEmpty: JsObject = original.value.foldLeft(original) { 
    case (obj, (key, JsString(st))) if st.isEmpty => obj - key 
    case (obj, (key, JsArray(arr))) if arr.isEmpty => obj - key 
    case (obj, (_, _)) => obj 
    } 
} 

Тогда вы можете вызвать omitEmpty на JsObject.

scala> Json.obj("x" -> "", "y" -> JsArray()).omitEmpty 
res5: play.api.libs.json.JsObject = {} 
+0

Эй, что хорошо работает, когда я неявно создать JSObject ... но не уверен МЕТОДИЧЕСКИЕ использовать его с помощью создания через Json.toJson (Poso). –

+0

Определите его на JsValue и используйте сопоставление с образцом, чтобы избежать преобразования экземпляров JsObject JsValue. – Ryan