当前位置: 首页 > 知识库问答 >
问题:

JSON列表到Scala列表

吕霄
2023-03-14

我正在用Play Framework和Scala创建一个后端API。我想将传入的请求映射到scala对象。该对象的实例变量之一是通道列表。以下是我目前拥有的:

接受请求并尝试将其映射到用户的Controller方法

def addUser = Action(parse.json) { request =>
  request.body.validate[User].fold({ errors =>
    BadRequest(Json.obj(
      "status" -> "Error",
      "message" -> "Bad JSON",
      "details" -> JsError.toFlatJson(errors)
    ))
  }, { user =>
    User.create(user.pushToken, user.channels)
    Ok(Json.obj("status" -> "OK", "message" -> "User created"))
  })
}

用户案例类:

case class User(id: Pk[Long], pushToken: String, channels: List[String])
implicit val userFormat = (
  (__ \ "id").formatNullable[Long] and
  (__ \ "pushToken").format[String] and
  (__ \ "channels").format[List[String]]
  )((id, pushToken, channels) => User(id.map(Id(_)).getOrElse(NotAssigned), pushToken, channels),
  (u: User) => (u.id.toOption, u.pushToken, u.channels))
def create(pushToken: String, channels: List[String]) {
  DB.withConnection { implicit c =>
    SQL("insert into user (pushToken, channels) values ({pushToken}, {channels})").on(
      'pushToken -> pushToken,
      'channels -> channels
    ).executeUpdate()
  }
}
Compilation error[could not find implicit value for parameter extractor: anorm.Column[List[String]]]

理想情况下,我希望作为一个用户能够接受这一点:

{
  "pushToken":"4jkf-fdsja93-fjdska34",
  "channels": [
    "channelA", "channelB", "channelC"
  ]
}

并从中创建用户。

共有1个答案

孟豪
2023-03-14

在Anorm中不能使用list[String]作为列值,这就是问题所在

您应该使用mkString方法或smth else

 类似资料:
  • 想象一下我有一个java列表 如果我想将其用作scala集合,比如缓冲区,我只需添加以下导入(如前面多次描述的) 问题是我必须检查列表是否不同于null。这将不起作用: 有没有一个简单的方法来转换java列表scala集合在这样一种方式,空转换为Buffer.empty?类似于选项工厂:

  • 问题内容: 我想在Play2中将Scala对象列表反序列化为JSON映射-我说这是JSON的一个非常简单的用例。我的JSON输出如下所示: 为此,我正在看Play2的JSON文档 “ The Play JSON library” 。对我来说,他们的例子非常琐碎,我已经证实它们对我有用。因此,我能够正确地反序列化单个对象。 但是,当我阅读文档时,在Play2中制作包含JSON列表的映射似乎有些冗长。

  • Scala 集合 Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是。。 列表的元素类型 T 可以写成 List[T]。例如,以下列出了多种类型的列表: // 字符串列表 val site: List[String] = List("Runoob", "Google", "Ba

  • 假设您有一个JSON,它看起来像这样: 使用Scala和类型来表示这一点似乎很自然: 我的问题是:是否可以使用Jackson的Scala模块将上面的JSON序列化为一个? 我的尝试: 例外情况: 线程“main”com.fasterxml.jackson.databind.JsonMappingExctive中的异常:无法构造...项目的实例,问题:抽象类型需要映射到具体类型,具有自定义反序列化器

  • 我有一个json 我怎么把它转换成学生名单(A,理科)(B,理科)

  • 问题内容: 我在Web API项目中使用了Dictionary,该项目的序列化方式类似于JSON: 因为我有重复的键,所以我不能再使用Dictionary类型,而现在我正在使用 但这是以这种方式序列化的: 有没有办法像字典一样进行序列化? 谢谢。 问题答案: 如果您使用Newtonsoft Json.NET库,则可以执行以下操作。 定义一个转换器,以所需的方式写入键/值对的列表: 然后使用转换器: