使用Json4S从包含Some和None值的列表生成Json字符串

时间:2013-06-01 12:50:28

标签: scala scalatra json4s

我正在使用Scalatra,后者又使用Json4S生成Json字符串。我收到了

  

[ “A”, “B”]

代表

  

列表(一些( “A”),无,一些( “B”))

我想收到

  

[ “A”,未定义, “B”]

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

undefined不是有效的json值,即使它在javascript中有效。 来自rfc4627(application / json):

  

JSON值必须是对象,数组,数字或字符串,或者是其中之一   以下三个字面名称:

     

false null tr​​ue

(未提及未定义)

然而,使用null代替undefined这是非常简单的。在scala控制台中,首先要导入几个:

scala> import org.json4s._
scala> import org.json4s.native.Serialization.write

客户序列化程序:

scala> class NoneJNullSerializer extends CustomSerializer[Option[_]](format => ({ case JNull => None }, { case None => JNull }))

瞧:

scala> implicit val formats = DefaultFormats + new NoneJNullSerializer()
scala> val ser = write(List(Some("A"), None, Some("B")))
ser: String = ["A",null,"B"]