我有这个功能:
def convertUsersToJsonOrig(lusers: Seq[User]): JsValue = {
Json.toJson(
lusers.map { u => Map("id" -> u.id,
"firstName" -> u.firstName,
"lastName" -> u.lastName,
"mobile" -> u.mobile,
"email" -> u.email,
"username" -> u.username,
"password" -> u.password)}
)
}
但是,我想添加一个字段,如:
def convertUsersToJsonOrig(lusers: Seq[User]): JsValue = {
Json.toJson(
lusers.map { u => Map("id" -> u.id,
"firstName" -> u.firstName,
"lastName" -> u.lastName,
"mobile" -> u.mobile,
"email" -> u.email,
"username" -> u.username,
"password" -> u.password,
"rowNum" -> 0
)}
)
}
但这给了我一个错误:
No Json serializer found for type Seq[scala.collection.immutable.Map[String,Any]]. Try to implement an implicit Writes or Format for this type.
rowNum不是用户的字段。
可以这样做吗?谢谢!
答案 0 :(得分:2)
原始Map
被推断为类型为Map[String, String]
,toJson
知道如何序列化。
但是然后你添加了一个数值,所以现在地图变成了Map[String, Any]
,以便同时容纳数字和字符串。但是toJson
并不知道如何处理Any
。
如果您将值设为字符串"rowNum" -> "0"
,它将起作用,但这不一定是您想要的。我不知道你正在使用哪一个,但是所有JSON库都提供了用于表示异构对象的包装类,这应该是这样的:
val userJson: JsValue = JsObject(
"firstName" -> JsString(u.firstName),
"age" -> JsNumber(u.age)
)
答案 1 :(得分:0)
好吧,我无法在Scala中添加该字段。但是,我能够在ES6中使用:
$.extend(true, {}, {'rowNumber':i}, json_data [i])
其中json_data包含来自服务器的所有对象的数组。