Scala Как преобразовать JsonAST.JValue в тип?

У меня есть угловое приложение, которое отправляет запрос на сервер следующим образом:

$scope.downloadPartDetails = (parts, e) ->
    req = {
      method: 'POST',
      url: '/downloads/partdetails',
      headers: {
        'Content-Type': "application/json; charset=utf-8"
      },
      data: { parts: [
        {manufacturer: "mfr1", partNumber: "part num1"},
        {manufacturer: "mfr2", partNumber: "part num2"},
        {manufacturer: "mfr3", partNumber: "part num3"}
      ] }
    }
    $http(req)

Он отображается на сервере следующим образом:

JArray(List(JObject(List(JField(manufacturer,JString(mfr1)), JField(partNumber,JString(part num1)))), JObject(List(JField(manufacturer,JString(mfr2)), JField(partNumber,JString(part num2)))), JObject(List(JField(manufacturer,JString(mfr3)), JField(partNumber,JString(part num3))))))

Есть ли способ преобразовать это в список [часть]?

case class Part(mfr: String, pn: String)

person An Illusion    schedule 20.02.2017    source источник


Ответы (1)


Было бы проще, если бы вы использовали одни и те же имена полей в json и в классе case.

case class Part(manufacturer: String, partNumber: String)
val part: Part = jvalue.extract[Part]

если вы не можете изменить имена полей в своем классе case, вам нужно будет реализовать собственный сериализатор, как описано здесь Десериализация объекта case в Scala с помощью JSON4S

person Mikel San Vicente    schedule 20.02.2017