如何将json4s JValue转换为Jackson JsonNode?

时间:2014-05-26 22:31:14

标签: scala jackson json4s

如果我正在使用json4s(使用Jackson绑定):

scala> import org.json4s._
scala> import org.json4s.jackson.JsonMethods._
scala> parse(""" { "numbers" : [1, 2, 3, 4] } """)
res0: org.json4s.JsonAST.JValue =
      JObject(List((numbers,JArray(List(JInt(1), JInt(2), JInt(3), JInt(4))))))

如何将上述给定的org.json4s.JsonAST.JValue转换为com.fasterxml.jackson.databind.JsonNode

为什么我要这样做:我想使用优秀的json-schema-validator Java库验证JValue对JSON模式,该库以JsonNode为参数。

我正在寻找某种与Play Framework's handling of JsValue <> JsonNode interop相当的东西。

1 个答案:

答案 0 :(得分:9)

由于Json4s 3.2.11-SNAPSHOT,有两种方法可以在JValue和JsonNode之间进行转换:

  • asJsonNode(jv: JValue): JsonNode将JValue转换为JsonNode
  • fromJsonNode(jn: JsonNode): JValue将JsonNode转换为JValue

以下是如何使用它的示例:

import org.json4s._
import org.json4s.jackson.JsonMethods._

val jv = parse(""" { "numbers" : [1, 2, 3, 4] } """)

val jn = asJsonNode(jv)
println(jn)
// {"numbers":[1,2,3,4]}

val jv2 = fromJsonNode(jn)
println(jv2)
// JObject(List((numbers,JArray(List(JInt(1), JInt(2), JInt(3), JInt(4))))))