Преобразовать объект json4s.Jvalue в игровую среду JsValue

Как мы можем преобразовать объект Json4s.Jvalue в игровую среду JsValue.

import org.json4s.native.JsonMethods._
    val jsonString = """
      {
        ...
        "firstName": "John",
        "lastName": "Smith",
        "address": {
          "streetAddress": "21 2nd Street",
          "city": "New York",
          "state": "NY",
          "postalCode": 10021
        },
        "phoneNumbers": [
          { "type": "home", "number": "212 555-1234" },
          { "type": "fax", "number": "646 555-4567" }
        ],
        ...
      }"""
  val json=parse(jsonString) //Jvalue

после выполнения некоторых Diff & merge с использованием Json4s lib, как мы можем преобразовать Jvalue в Jsvalue?

1 ответ

Если мы приведем следующее неявное преобразование в области видимости

implicit def json4sToPlayJson(json4sVal: JValue): JsValue = 
  Json.parse(compact(render(json4sVal)))

тогда, например, если какой-то метод foo ожидает Play's JsValue

def foo(json: JsValue) = { ... }

но это дано JValue, компилятор автоматически вызовет json4sToPlayJson Метод для преобразования значения:

val someJson4sValue = ...
foo(someJson4sValue) // becomes foo(json4sToPlayJson(someJson4sValue))

Ломать Json.parse(compact(render(json4sVal))) состав у нас есть:

  • compact(render(json4sVal)) принимает json4s JValue и возвращает исходную строку
  • Json.parse берет эту строку и возвращает Play JsValue
Другие вопросы по тегам