Ich erhalte einige JSON aus einem Stream.Scala konvertieren JSON zu einer aus einer Reihe von Typen
Das Objekt könnte durch einen von mehreren Skalatypen dargestellt werden. Zum Beispiel: {"userid":"blerk","name":"Fred"}
wäre User(userId:String, userName:String)
{"groupId":"zerk","name":"Accounting"}
Group(groupId:String,groupName:String}
(realen Objekte haben viele weitere Elemente) sein würde.
Ich bin mit Spray-json wenn es ankommt, aber was ich wissen will, ist dies:
Ich mag würde, eine Funktion haben „konvertieren“, dass die Reihe nach hat ein Try(myJson.convertTo[T])
, bis es erfolgreich ist, und gibt einen Wert vom Typ T
zurück.
Mein Ziel ist es, zu vermeiden, eine Art von String-Matching-Heuristiken zu verwenden, um im Voraus herauszufinden, welchen Typ es sein kann, und einfach einen neuen Typ an eine Liste anhängen, wenn ein neuer Fall auftaucht. Ich möchte auch leider Code wie
val t1=Try(myJson.convertTo[User])
if(t1.isSuccess) return t1.get
val t2=Try(myJson.convertTo[Group])
if(t2.isSuccess) return t2.get
vermeiden, ich habe Probleme mein kleines Gehirn, um dieses Einwickeln und wäre für jede Hilfe dankbar.
Danke; Da es sich um eine Lernübung handelt, bin ich nicht bereit, auf Typ-Sicherheit (zumindest noch nicht) zu verzichten. Und da es einige mögliche Typen gibt, ist auch die verschachtelte "Entweder" -Route nicht ganz zufriedenstellend ;-). Ich schätze die Verbindung zu Shapeless, da ihr 'ShapelessStream' aussieht, als könnte es auch nützlich sein! – Mike