Jouer ScalaJSON Lit[T] l'analyse de ValidationError(erreur.chemin d'accès.manquant,WrappedArray())

j'ai une drôle de données json à la recherche comme:

[ {
  "internal_network" : [ {
    "address" : [ {
      "address_id" : 2,
      "address" : "172.16.20.1/24"
    }, {
      "address_id" : 1,
      "address" : "172.16.30.30/24"
    } ]
  } ],
  "switch_id" : "0000000000000001"
}, {
  "internal_network" : [ {
    "address" : [ {
      "address_id" : 2,
      "address" : "172.16.30.1/24"
    }, {
      "address_id" : 1,
      "address" : "192.168.10.1/24"
    }, {
      "address_id" : 3,
      "address" : "172.16.10.1/24"
    } ]
  } ],
  "switch_id" : "0000000000000002"
} ]

j'ai écrit des classes de cas et personnalisée lit:

  case class TheAddress(addr: (Int, String))
  implicit val theAddressReads: Reads[TheAddress] = (
    (__ \ "address_id").read[Int] and
      (__ \ "address").read[String] tupled) map (TheAddress.apply _)

  case class Addresses(addr: List[TheAddress])
  implicit val addressesReads: Reads[Addresses] =
    (__ \ "address").read(list[TheAddress](theAddressReads)) map (Addresses.apply _)

  case class TheSwitch(
    switch_id: String,
    address: List[Addresses] = Nil)
  implicit val theSwitchReads: Reads[TheSwitch] = (
    (__ \ "switch_id").read[String] and
    (__ \ "internal_network").read(list[Addresses](addressesReads)))(TheSwitch)

  case class Switches(col: List[TheSwitch])
  implicit val switchesReads: Reads[Switches] = 
    (__ \ "").read(list[TheSwitch](theSwitchReads)) map (Switches.apply _)

quand j'ai valider les données fournies avec:

val json: JsValue = Json.parse(jsonChunk)
println(json.validate[TheSwitch])

j'obtiens:

JsError(List((/switch_id,List(ValidationError(error.path.missing,WrappedArray()))), (/internal_network,List(ValidationError(error.path.missing,WrappedArray())))))

je peux y accéder avec JsPath comme

val switches: Seq[String] = (json \\ "switch_id").map(_.as[String])

mais je suis vraiment à bout de ressources, avec ce que je fais mal à la coutume de lit.
j'ai essayé de mettre un autre haut niveau de la touche, et d'autres combinaisons, mais il semble qu'il me manque quelque chose de crucial, puisque j'ai commencé avec ce juste aujourd'hui.

merci beaucoup.

InformationsquelleAutor FoggyDew | 2014-02-12