好吧,我尝试了一些方法,但没有任何效果,或者说没有任何看起来是最好的选择。
我有一个客户端对象(Angular)为。
export class SavedSheet {
workspaceId: number;
newRows: [any[]];
updatedRows: UpdatedRow[];
deletedRows: number[];
}
newRows(json)看起来是这样的:
newRows:[
["-1", "123123"],
["-2", "sadasd"]
]
我试图把它发送到我的 Scala Play!
api作为一个case类,看起来像。
case class SavedSheet(workspaceId: Int,
newRows: List[List[String]] // String will work, but I need to use Any/Object type
updatedRows: List[UpdatedRow],
deletedRows: List[Int])
object SavedSheet {
implicit val read = Json.reads[SavedSheet]
implicit val write = Json.writes[SavedSheet]
def tupled = (SavedSheet.apply _).tupled
}
// db table example
------------------------
| row_id | ColA | ColB |
------------------------
| 1 | val2 | val3 |
------------------------
| 2 | val8 | val9 |
这是一个动态的db表,我把这些数据保存在那里。我不知道这个表会有多少列或者什么类型。我所知道的是,第一个值将在列 "row_id "处引用所有时间作为标识符。
使用 newRows: List[List[String]]
将会正常工作,因为最后我将计算一个查询为。
INSERT INTO table_name
VALUES (newRows[0], newRows[1], newRows[2], ...)
类型并不那么重要(所有的值都可以是字符串值,即使值是一个数字,查询也会被执行)。
但作为一个最佳实践,我希望使用Any或Object类型而不是String,因为值列表有不同的类型。newRows: List[List[Any]]
或者 newRows: List[List[Object]]
问题是 play.api.libs.json
库不能解析AnyObject类型。作为一个想法,我可以在对象伴侣中写一个隐式的val,读取keysvalues。即使这样,我也需要在我的Service里面解析值。
对于另一种情况,我使用JsObject,但是对于数组的情况,我没有key,我可以创建一个,然后更新我的Service。我可以创建一个,然后更新我的客户端体,数组就会变成这样。
newRows: [
{ key1: "[-1,"123123"]" },
{ key2: "[-2,"sadasd"]" }
]
这种情况下,使用JsObject就能正常工作 newRows: List[JsObject]
因为每个JsObject都被翻译成一个键(字符串)和一个值(数组).但我想知道是否可以直接使用值作为Any或对象。
谢谢你