检查一个对象是否在json4s/lift-json中有一个字段

dou*_*laz 3 json scala lift-json json4s

我有一些带有一些字段的json,我想检查它们中是否有一些存在.我正在提取值并针对JNothing测试它,但它太冗长了:

val json: JValue = ...

val jsonIsType1 = (json \ "field1") != JNothing && (json \ "field2") != JNothing
Run Code Online (Sandbox Code Playgroud)

是否有更紧凑的方法使用json4s/lift-json检查json对象中是否存在字段?理想情况如下:

val jsonIsType1 = json.has("field1") && json.has("field2")
Run Code Online (Sandbox Code Playgroud)

Dam*_*iya 19

JValue没有'has'操作符,但Scala的implicits功能允许您添加该功能而不会有太多麻烦.

这是一个例子:

implicit class JValueExtended(value: JValue) {
  def has(childString: String): Boolean = {
    if ((value \ childString) != JNothing) {
      true
    } else {
      false
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

scala> val json = Json.parse("""{"field1": "ok", "field2": "not ok"}""")

scala> json.has("field1")
res10: Boolean = true
Run Code Online (Sandbox Code Playgroud)