Arrays scala request.body.asJson访问数组
在我的play Framework应用程序中,我向后端发送了一个json,在后端,我希望访问json中的数组 我试过这个:Arrays scala request.body.asJson访问数组,arrays,json,scala,playframework,playframework-2.0,Arrays,Json,Scala,Playframework,Playframework 2.0,在我的play Framework应用程序中,我向后端发送了一个json,在后端,我希望访问json中的数组 我试过这个: val processSteps = request.body.asJson.map{ json => (json \ "stepsData").asOpt[Object].map { steps => println(steps) } for (processStep <- steps) { processStep.map(_.val
val processSteps = request.body.asJson.map{
json => (json \ "stepsData").asOpt[Object].map { steps =>
println(steps)
}
for (processStep <- steps) {
processStep.map(_.validate[ProcessStepTemplatesModel] match {
您应该在json验证中执行此操作,即在
asOpt
方法中:
(json \ "stepsData").asOpt[Array[ProcessStepTemplatesModel]]
如果在正文中使用其他字段,甚至可以为预期正文定义一个case类,并直接对其进行验证:
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])
您应该在json验证中执行此操作,即在
asOpt
方法中:
(json \ "stepsData").asOpt[Array[ProcessStepTemplatesModel]]
如果在正文中使用其他字段,甚至可以为预期正文定义一个case类,并直接对其进行验证:
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])
你能告诉我你的数据是什么样子吗 我的方法是,为stepsData设置一个案例类:
case class StepData(attributes ..)
然后有一个包装:
case class StepDataWrapper(stepsData : List[StepData])
然后在控制器中指定隐式格式:
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(_))
}
你能告诉我你的数据是什么样子吗 我的方法是,为stepsData设置一个案例类:
case class StepData(attributes ..)
然后有一个包装:
case class StepDataWrapper(stepsData : List[StepData])
然后在控制器中指定隐式格式:
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(_))
}
添加了上面定义的请求此案例类:StepData(steptitle:String,title:String)并按照上面的其他步骤进行操作。也许下面的操作可以帮助您:添加上面定义的请求此案例类:StepData(steptitle:String,title:String)并按照上面的步骤进行操作,它应该会起作用。也许下面这一点可以帮助你:第一个什么都不返回,第二个错误很多;)什么样的错误?在作用域中是否有隐式的
读取[StepProcessingRequestData]
?它会验证数组中的元素吗?第一个不会返回任何内容,第二个会返回大量错误;)什么样的错误?在作用域中是否有隐式的读取[StepProcessingRequestData]
?它是否验证数组中的元素?