Spielen ScalaJSON Liest[T] parsing ValidationError(Fehler.Pfad.fehlt,WrappedArray())
habe ich eine lustige json-Daten zu suchen, als:
[ {
"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"
} ]
schrieb ich Fall Klassen und benutzerdefinierte liest:
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 _)
wenn ich überprüfen die zur Verfügung gestellten Daten mit:
val json: JsValue = Json.parse(jsonChunk)
println(json.validate[TheSwitch])
bekomme ich:
JsError(List((/switch_id,List(ValidationError(error.path.missing,WrappedArray()))), (/internal_network,List(ValidationError(error.path.missing,WrappedArray())))))
kann ich darauf zugreifen mit JsPath wie
val switches: Seq[String] = (json \\ "switch_id").map(_.as[String])
aber ich bin mit meinem Latein echt am Ende, was mache ich falsch mit benutzerdefinierten liest.
ich habe versucht, mit dem setzen einer anderen top-level-Taste, und andere Kombinationen, aber scheint, ich bin fehlt etwas entscheidendes, seit ich angefangen habe, mit dieser nur heute.
vielen Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Fehler ist Ihnen zu sagen, statt
/switch_id
es wurde ein array. So wie es scheint, sollten Sie das Lesen von JSON alsList[Switch]
statt nurSwitch
Vorausgesetzt, Ihr
Reads
(nicht testen) korrekt sind, sollte dies funktionieren: