我一直在努力使用文档中描述的隐式转换从 Scalatra 应用程序返回 JSON 。
我注意到带有空选项(即无)的键会从生成的 JSON 中删除(而不是为空,这似乎是预期的行为)
我试图使用隐式转换来强制转换为None
,null
例如:
class NoneJNullSerializer extends CustomSerializer[Option[_]](format => (
{
case JNull => None
}, {
case None => JNull
}
))
protected implicit val jsonFormats: Formats = DefaultFormats.withBigDecimal + new NoneJNullSerializer()
但是,在执行自定义序列化程序之前,这些键似乎已被剥离。
有没有人找到解决方案?
请注意,此问题中描述的解决方案适用于所描述的数组情况,但似乎不适用于 Maps。
更新: 这是我一直在使用的测试:
get("/testJSON") {
Map(
"test_key" -> "testValue" ,
"test_key6" -> "testValue6" ,
"subObject" -> Map(
"testNested1" -> "1" ,
"testNested2" -> 2 ,
"testArray" -> Seq(1, 2, 3, 4)
),
"testNone" -> None ,
"testNull" -> null ,
"testSomeNull" -> Some(null) ,
"testJNull" -> JNull ,
"testSomeJNull" -> Some(JNull)
)
}
我正在寻找的输出是
{
"test_key": "testValue",
"test_some_j_null": null,
"sub_object": {
"test_nested1": "1",
"test_nested2": 2,
"test_array": [
1,
2,
3,
4
]
},
"test_none": null,
"test_j_null": null,
"test_key6": "testValue6",
"test_null": null,
"test_some_null": null
}
我也在使用
protected override def transformResponseBody(body: JValue): JValue = { body.underscoreKeys }
对于带下划线的键