2017-05-31 1 views
1

私はバックエンドで私はこれを試してみましたScalaのrequest.body.asJsonアクセスアレイ

JSONでアレイ上にアクセスしたい、バックエンドにJSONを送信しますあなたは、JSONの検証にトンをこの操作を行う必要があります

Some({"steps":"","stepsData":[{"steptitle":"sd","title":"asd"}],"stepType":"duty","createdat":"2017-05-31 14:30:26","updatedat":"2017-05-31 14:30:26","activeSnackbar":false,"snackbarText":{"type":"span","key":null,"ref":null,"props":{"children":[{"key":null,"re 
f":null,"props":{"value":"snackbar.processes.createProcess"},"_owner":null,"_store":{}},": ",null]},"_owner":null,"_store":{}},"approvedProcessTemplates":[],"approveprocess":17,"approveprocessTitle":"Felix","trainingsprocess":47,"trainprocessTitle":"Posaune","d 
eleted":false,"dialogActive":false,"title":"ads","processtemplate":1,"loaded":true,"version":"asd","responsible":"asd","accountable":"asd","consulted":"asd","informed":"asd","deadline":"2017-05-18T12:30:09.460Z","dialogActions":[{"label":{"key":null,"ref":null, 
"props":{"value":"dialog.processes.deleteProcess.cancel"},"_owner":null,"_store":{}}}],"dialogTitle":{"key":null,"ref":null,"props":{"value":"dialog.processes.selectProcessTemplate.trainingsprocess.header"},"_owner":null,"_store":{}},"dialogHandlerVariable":1}) 

答えて

3

をすることができますあなたのデータがどのように見えるかを教えてください。その後

case class StepDataWrapper(stepsData : List[StepData]) 

コントローラ内で暗黙の形式を指定します:

私はこれがあるアプローチような方法、stepsData用ケースクラスがあります。その後、

case class StepData(attributes ..) 

とラッパーを持って

import play.api.libs.json._ 

implicit val stepDataFormat = Json.format[StepData] 

implicit val stepDataListWrapperFormat =Json.format[StepDataWrapper] 

そして、

val processSteps = request.body.asJson.asOpt[StepDataWrapper] 
        .map{ 
        stepDataWrapper => stepDataWrapper.stepsData.map(println(_)) 
        } 
+0

上記の – Felix

+0

の要求をこのケースクラスに定義しました:StepData(steptitle:String、title:String) そして上記のように残ります。 –

+0

これはおそらくあなたを助けることができます:https://stackoverflow.com/questions/34437520/making-reads-and-writes-in-scala-play-for-lists-of-custom-classes –

1

:私は

リクエストにアクセスしたい配列です帽子はあなたのasOpt方法である:

(json \ "stepsData").asOpt[Array[ProcessStepTemplatesModel]] 

あなたは身体の他のフィールドを使用している場合、あなたも期待ボディ用ケースクラスを定義し、それを直接検証することができます:

case class StepProcessingRequestData(
    stepsData: Array[ProcessStempTemplatesModel], 
    ... // add your other fields, as defined in your JSON schema 
) 

object StepProcessingRequestData { 
    implicit val reads = Json.reads[StepProcessingRequestData] 
} 

val processStepsOpt: Option[StepProcessingRequestData] = 
    request.body.asJson.flatMap(_.asOpt[StepProcessingRequestData]) 
+0

最初のものは何も返しません。エラーの2番目のロット;) – Felix

+1

どのような種類のエラー?スコープ内に暗黙の 'Read [StepProcessingRequestData]'がありますか?それは配列の要素を検証しますか? –