シナリオ: 私はケースクラス次ている:私は書く必要が次のコードで間違いが見つかりませんでしたか?
case class Student(firstName:String, lastName: String)
読み取りと学生のために書き込みます。私が提供するjsonはSequence of Studentです。例については :
{
"College": "Abc",
"student" : [{"firstName" : "Jack", "lastName":"Starc"},
{"firstName" : "Nicolas", "lastName":"Pooran"}
]
}
私として読み込みと書き込み書かれています:今、私はタイプのパーサを作成し、学生が配列または単純なオブジェクトであるかどうかを確認する必要が
implicit val studentFormat = Json.format[Student]
implicit val studentRead = Json.reads[Student]
implicit val studentWrite = Json.writes[Student]
implicit val studentReadSeq = Reads.seq(studentRead)
implicit val studentWriteSeq = Writes.seq(studentWrite)
を。ここで重要なのは、学生または学生情報です。だから私はjsonで提供される価値に基づいてパーサーを作らなければならない。このため
私は次のように行っている:
def studentCheck(jsonValue: JsObject) = {
var modifiedJson = Json.obj()
for ((key, value) <- jsonValue.value) {
if(value.validate[Student].isSuccess) {
val json =
studentFormat.writes(value.validate[Student].get).as[JsObject]
modifiedJson.+(key, json)
}
else if(studentReadSeq.reads(value).isSuccess) {
//My Code will be here
modifiedJson
}
else {
println("Error")
modifiedJson.+(key,value)
}
}
}
val studentJson = Json.obj(
"college" -> "ABC",
"student" -> Json.arr(
Json.obj("firstName" -> "Jack", "lastName" -> "Starc"),
Json.obj("firstName" -> "Nicolas", "entity" -> "Pooran")
)
)
studentCheck(studentJson)
私はここに来る問題は、文が代わりのelseifで実行された場合でも、学生のリスト最初のケース、すなわちを提供する、です。どのようにすべての条件を満たすように検証することができますか。つまり、ステートメントが実行され、Student Listが提供されている場合、Studentオブジェクトが提供されます。elseifステートメントが実行されます。