2013-08-22 21 views
5

Boş değerleri kabul etmem gereken ancak eksik özellikleri kullanmam gereken bir kullanım durumum var. Bu Örneğin Çal Framework 2.1.3Oyna Scala Json Missing Property vs Null

üzerindedir: Bu dava sınıf

aşağıdaki kabul ve foo nesne oluşturmak istiyorum daha büyük bir vaka sınıfının bir parçası olabilir

case class Foo(a: Option[String], b: Option[String], c: Option[String]) 

:

{ 
    "foo" : { 
     "a" : "blah", 
     "b" : null, 
     "c" : "blah" 
    } 
} 

Ama bu:

Şu

Dava sınıfa JSON okumak için aşağıdaki adres:

val FooReader = (
    (__ \ "a").readNullable[Setting] and 
    (__ \ "b").readNullable[String] and 
    (__ \ "c").readNullable[String])(Foo) 

nasıl FooReader mülkü eksik üzerinde JsError üretmek ancak null adlı izin yapabilirsiniz? Eksik olan JsError eğer '(__ \ "b",)' üretecek

val FooReader = (
    (__ \ "a").readNullable[String] and 
    (__ \ "b").read(Reads.optionNoError[String]) and 
    (__ \ "c").readNullable[String] 
)(Foo) 

'Reads.optionNoError [dize]':

cevap

5

Sen gibi bir şey kullanabilirsiniz.

Aslında böyle bir şey yapabilirsiniz

: benim için mükemmel

val FooReader = (
    (__ \ "a").read(Reads.optionNoError[String]) and 
    (__ \ "b").read(Reads.optionNoError[String]) and 
    (__ \ "c").read(Reads.optionNoError[String]) 
)(Foo) 
+0

Works:. 'val FooReader = ( (__ \ "a") okumak (Reads.optionNoError [dize]) ve (__ \ "b") okuyun (Reads.optionNoError [Dize]) ve (__ \ "c") okuyun (Reads.optionNoError [Dize]) ) (Foo) –

+0

Evet, şimdi benim için çalışıyor:) Foo'nun eşlik eden nesnesi içinde Foo kurmaya çalıştığım zaman kafası karıştığını düşünüyorum. Uygulamayı açık bir şekilde ayarladığım zaman çalışır –

+0

Bir jsonun orijinal nesnedeki tüm alanları içermeyebileceği bir kullanım durumum var, ve orijin alanlarının ayarlanmasının yanı sıra geçerli olması gereken 'null' olabilecek bazı dize alanları boş. Bunu yapmak için doğrudan bir yol yok gibi görünüyor. – Ashesh