使用默认的json库从客户端解析动态对象。

问题描述 投票:0回答:0

好吧,我尝试了一些方法,但没有任何效果,或者说没有任何看起来是最好的选择。

我有一个客户端对象(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或对象。

谢谢你

json angular scala playframework jsobject
© www.soinside.com 2019 - 2024. All rights reserved.