Хорошо, я пробовал несколько способов, но ничего не работает или ничего не выглядит лучшим вариантом.
У меня есть клиентский объект (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 |
Это таблица Dynami c 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
не может анализировать тип Any / Object. В качестве идеи я могу написать неявный val в объекте-компаньоне, который считывает ключи / значения? Даже при этом мне нужно проанализировать значение внутри моей службы.
Для других случаев я использую JsObject, но для случаев с массивами у меня нет ключа. Я могу создать его и обновить тело моего клиента, и массив станет примерно таким:
newRows: [
{ key1: "[-1,"123123"]" },
{ key2: "[-2,"sadasd"]" }
]
Этот случай будет правильно работать с использованием newRows: List[JsObject]
, потому что каждый JsObject переводится как ключ (строка) и значение (массив). Но я хочу знать, можно ли напрямую использовать значения как Any или Object
Спасибо