我正在使用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
))