如何从 Scala 中的 json 格式的表单中获取数组?

How to get array from a json formatted form in Scala?

我是 SCALA 的新手,我打算用 PLAYSLICK 开发一个 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)
        }
    )
}

它工作正常。可以吗?