मैं अक्सर क्रमानुसार करने की है/deserialize योग प्रकार (जैसे Either[S,T]
), और मैं नहीं अभी तक एक सामान्य या सुरुचिपूर्ण तरीका यह करने के लिए मिल गया है। यहाँ एक उदाहरण प्रकार (अनिवार्य रूप से Either
के बराबर)Json क्रमबद्धता एकाधिक मामला वर्ग (योग प्रकार) स्काला के प्ले में
sealed trait OutcomeType
case class NumericOutcome(units: String) extends OutcomeType
case class QualitativeOutcome(outcomes: List[String]) extends OutcomeType
यहाँ एक साथी उद्देश्य यह है कि क्रमबद्धता को लागू करता है पर मेरे सबसे अच्छे प्रयास है। यह काम करता है, लेकिन यह हर योग प्रकार के लिए अधिक से अधिक चीजों की इन प्रकार के लिखने के लिए बहुत थकाऊ है। क्या यह अच्छा और/या अधिक सामान्य बनाने के लिए कोई सुझाव है?
import play.api.libs.json._
import play.api.libs.functional.syntax._
object OutcomeType {
val fmtNumeric = Json.format[NumericOutcome]
val fmtQualitative = Json.format[QualitativeOutcome]
implicit object FormatOutcomeType extends Format[OutcomeType] {
def writes(o: OutcomeType) = o match {
case [email protected](_) => Json.obj("NumericOutcome" -> Json.toJson(n)(fmtNumeric))
case [email protected](_) => Json.obj("QualitativeOutcome" -> Json.toJson(q)(fmtQualitative))
}
def reads(json: JsValue) = (
Json.fromJson(json \ "NumericOutcome")(fmtNumeric) orElse
Json.fromJson(json \ "QualitativeOutcome")(fmtQualitative)
)
}
}
आप की कोशिश की है json4s http://json4s.org? इसके अलावा, आप खेलने के साथ उपयोग करना चाहते हैं तो आप यहां दिखना चाहिए: https://github.com/tototoshi/play-json4s या इस खुद को लागू। –
मेरे लिए अच्छा लग रहा है। क्या आप play2.5 के लिए अपना सर्वश्रेष्ठ प्रयास अपडेट कर सकते हैं? धन्यवाद! – qed
कोई बात नहीं, मुझे पता चला कैसे play2.5 में यह कर और एक जवाब में यह डाल करने के लिए। – qed