1

私は小さなプロジェクトに取り組んでおり、Scala/Play バックエンドを機能させようとしています。私はそれを返して、Web サービス側で JSON を処理しようとしています。JSON のマーシャリングとアンマーシャリングを機能させる方法がわかりません。誰かがこの問題について私を助けてくれますか? Play 2.1 と Scala 2.10 を使用しています。私が得るエラーは、「タイプの特性読み取りでメソッド読み取りをオーバーライドしています(json:play.api.libs.json.JsValue)play.api.libs.json.JsResult [models.Address];メソッド読み取りには互換性のない型があります」

  • 編集しました。他の誰かが私に解決策を教えてくれました。読み取りには、JsResult ではなく JsSuccess を使用する必要があります。

    case class Address(id: Long, name: String)
    
    object Address {
    
    implicit object AddressFormat extends Format[Address] {
    def reads(json: JsValue):Address = JsSuccess(Address(
        (json \ "id").as[Long],
        (json \ "name").as[String]
    ))
    
    def writes(address: Address): JsValue = JsObject(Seq(
        "id" -> JsNumber(address.id),
        "name" -> JsString(address.name)
    ))
    }
    }
    
4

3 に答える 3

3

Play 2.1 を使用すると、コードを簡素化できます。

import play.api.libs.json._
import play.api.libs.functional.syntax._

implicit val addressFormat = (
  (__ \ "id").format[String] and
  (__ \ "name").format[Long]
)(Address.apply, unlift(Address.unapply))

より詳細な情報はここにあります: ScalaJsonCombinators

于 2013-02-16T11:29:34.643 に答える
2

実験的なものとしてマークされていますが、マクロを使用してコードをさらに簡素化できます。

import play.api.libs.json._
import play.api.libs.functional.syntax._

case class Address(id: Long, name: String)

implicit val addressFormat = Json.format[Address]

この手法の詳細については、Play の公式ドキュメントを参照してください。

于 2013-02-16T20:54:33.877 に答える