如何使用json4s

时间:2018-04-10 15:52:18

标签: json scala json4s

我正在使用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实现这一目标?

1 个答案:

答案 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)