我正在使用json4s。
我知道您可以使用None
“保留Option
成员中所有DefaultFormats.preservingEmptyValues
成员的case class MyType(a: Option[String], b: Option[Int], c: Int)
值。
这样的输出如下:
阶
MyType(None, None, 1)
实例
{ "a": null , "b": null , "c": 1 }
输出
DefaultFormats.preservingEmptyValues
<小时/> 没有
case class MyType(a: Option[String], b: Option[Int], c: Int)
,输出就像这样:
阶
MyType(None, None, 1)
实例
{ "c": 1 }
输出
a
我想做什么,它保留一个成员的默认行为(删除属性),比如说b
并使用preservingEmptyValues代替另一个成员,比如说case class MyType(a: Option[String], b: Option[Int], c: Int)
并输出如下:
阶
MyType(None, None, 1)
实例
{ "b": null , "c": 1 }
输出
def execute_callable(self):
with TemporaryDirectory(prefix='venv') as tmp_dir:
...
self._execute_in_subprocess(
self._generate_python_cmd(tmp_dir,
script_filename,
input_filename,
output_filename,
string_args_filename))
return self._read_result(output_filename)
<小时/> 如何使用json4s实现这一目标?
答案 0 :(得分:1)
这可以通过为a
字段实现自定义序列化功能来实现:
private def serializeA: PartialFunction[(String, Any), Option[(String, Any)]] = {
case ("a", x) => x match {
case None => None
case _ => Some(("a", x))
}
}
并将其添加到隐式Formats
:
implicit val formats = DefaultFormats.preservingEmptyValues +
FieldSerializer[MyType](serializer = serializeA)