如何从 Scala 中的 json 格式的表单中获取数组?
How to get array from a json formatted form in Scala?
我是 SCALA
的新手,我打算用 PLAY
和 SLICK
开发一个 API
。
我要通过网络请求从表单中获取一个数组(json 格式化所有值都是整数),如下所示:-
请求数据:
{"ids": [1,2,3,4,5,6,7,8,9]}
现在我想获取表单数组数据。因此,我在我的控制器中声明了一个表单:-
case class IdsForm(ids: Array[Int])
private val idsForm: Form[IdsForm] = Form(
mapping(
"ids" -> ????
)(IdsForm.apply)(IdsForm.unapply)
)
现在想打印该数组中的所有元素。因此声明一个函数如下:-
def getIds() = Action.async(parse.json) {
implicit request => idsForm.bind(request.body).fold(
formWithErrors => Future.successful(BadRequest(formWithErrors.toString)),
form => {
val ids = form.ids
// Print all the array elements
for ( x <- ids ) {
println( x )
}
val responseBody = Json.obj(
"status" -> 200,
"message" -> Json.toJson("Successfully printed")
)
Ok(responseBody)
}
)
}
请告诉我,在我的代码中用什么代替 "ids" -> ????
。如果是单个号码,我输入 "id" -> number
。我不知道在 "ids" -> ????
中用什么代替 ????
您不应该使用表单提交 JSON... Here 您有如何操作的示例。不过,您可以根据需要上传 JSON 文件吗?
例如(我没有测试这个),你的数据class:
case class MyData(ids: List[Int])
object MyData { implicit val myDataJsonFormat: Json.format[MyData] }
你的控制器路由:
def uploadJson = Action(parse.json) { request =>
val dataResult = request.body.validate[MyData]
dataResult.fold(
errors => { BadRequest(........) },
data => {
// do whatever with data....
Ok(....)
}
)
}
我将我的代码用作:-
case class IdsForm(ids: Seq[Int])
private val idsForm: Form[IdsForm] = Form(
mapping(
"ids" -> seq[number]
)(IdsForm.apply)(IdsForm.unapply)
)
函数是:-
def getIds() = Action.async(parse.json) {
implicit request => idsForm.bind(request.body).fold(
formWithErrors => Future.successful(BadRequest(formWithErrors.toString)),
form => {
val ids = form.ids
// Print all the array elements
for ( x <- 0 to ids.length - 1 ) {
println( ids(x) )
}
val responseBody = Json.obj(
"status" -> 200,
"message" -> Json.toJson("Successfully printed")
)
Ok(responseBody)
}
)
}
它工作正常。可以吗?
我是 SCALA
的新手,我打算用 PLAY
和 SLICK
开发一个 API
。
我要通过网络请求从表单中获取一个数组(json 格式化所有值都是整数),如下所示:-
请求数据:
{"ids": [1,2,3,4,5,6,7,8,9]}
现在我想获取表单数组数据。因此,我在我的控制器中声明了一个表单:-
case class IdsForm(ids: Array[Int])
private val idsForm: Form[IdsForm] = Form(
mapping(
"ids" -> ????
)(IdsForm.apply)(IdsForm.unapply)
)
现在想打印该数组中的所有元素。因此声明一个函数如下:-
def getIds() = Action.async(parse.json) {
implicit request => idsForm.bind(request.body).fold(
formWithErrors => Future.successful(BadRequest(formWithErrors.toString)),
form => {
val ids = form.ids
// Print all the array elements
for ( x <- ids ) {
println( x )
}
val responseBody = Json.obj(
"status" -> 200,
"message" -> Json.toJson("Successfully printed")
)
Ok(responseBody)
}
)
}
请告诉我,在我的代码中用什么代替 "ids" -> ????
。如果是单个号码,我输入 "id" -> number
。我不知道在 "ids" -> ????
????
您不应该使用表单提交 JSON... Here 您有如何操作的示例。不过,您可以根据需要上传 JSON 文件吗?
例如(我没有测试这个),你的数据class:
case class MyData(ids: List[Int])
object MyData { implicit val myDataJsonFormat: Json.format[MyData] }
你的控制器路由:
def uploadJson = Action(parse.json) { request =>
val dataResult = request.body.validate[MyData]
dataResult.fold(
errors => { BadRequest(........) },
data => {
// do whatever with data....
Ok(....)
}
)
}
我将我的代码用作:-
case class IdsForm(ids: Seq[Int])
private val idsForm: Form[IdsForm] = Form(
mapping(
"ids" -> seq[number]
)(IdsForm.apply)(IdsForm.unapply)
)
函数是:-
def getIds() = Action.async(parse.json) {
implicit request => idsForm.bind(request.body).fold(
formWithErrors => Future.successful(BadRequest(formWithErrors.toString)),
form => {
val ids = form.ids
// Print all the array elements
for ( x <- 0 to ids.length - 1 ) {
println( ids(x) )
}
val responseBody = Json.obj(
"status" -> 200,
"message" -> Json.toJson("Successfully printed")
)
Ok(responseBody)
}
)
}
它工作正常。可以吗?