我正在使用JSON4S生成一些JSON。

如果满足条件,我想产生以下内容:

{"fld1":"always", "fld2":"sometimes"}


如果不满足条件,我想产生:

{"fld1":"always"}


到目前为止,我尝试过的是:

val fld1 = "fld1" -> "always"

val json = if(condition) ("fld2" -> "sometimes") ~ fld1 else fld1

compact(render(json))


但是,这在render“找到的:具有可序列化的产品。必需的:org.json4s.package.JValue”中给我一种类型不匹配的情况。

有趣的是render(("fld2" -> "sometimes") ~ fld1)起作用,而render(fld1)也起作用。问题似乎与为json推断的类型有关。

我该如何解决?

最佳答案

这不是我能想到的最好的方法,但是声明自己的类型应该起作用:

val json: JObject =
  if(condition) ("fld2" -> "sometimes") ~ fld1 else fld1

compact(render(json))


另外,请注意,您可以通过类型推断来帮助自己:如果可以一次性渲染:

compact(render(
  if(condition) fld1 ~ ("fld2" -> "sometimes") else fld1
))

10-05 19:52