对于给定的HashMap结构:
scala.collection.immutable.Map[scala.Option[java.util.UUID], scala.collection.immutable.List[crm.v1.auto.generated.customapis.CustomapisPublic]]Json.toJson会产生这样的结果:
[
[
"bb2b5475-8f27-4dd4-9221-05904177a666",
[
{
"id": "5e700dab-e352-47d5-8ad8-0d9e16db8fbc",
"time": 1616500566442,
"isGroup": true,
"name": "rapidx",
"parentId": "bb2b5475-8f27-4dd4-9221-05904177a666",
"projectId": "d531e915-afb0-42e9-9c90-831f0413794e",
"teamId": "a03339d4-4ccc-48ea-8bd9-b506ad83c492"
},
{
"id": "5287f6bd-2f55-4232-9064-a989ae5926f3",
"time": 1616503457651,
"isGroup": true,
"name": "User",
"parentId": "bb2b5475-8f27-4dd4-9221-05904177a666",
"projectId": "d531e915-afb0-42e9-9c90-831f0413794e",
"teamId": "a03339d4-4ccc-48ea-8bd9-b506ad83c492"
}
]
],
[
"5287f6bd-2f55-4232-9064-a989ae5926f3",
[
{
"id": "db0f59ea-fbf0-4024-ad54-04ea387223b0",
"time": 1616569959967,
"description": "Post Daily data",
"isGroup": true,
"name": "Post Daily data",
"parentId": "5287f6bd-2f55-4232-9064-a989ae5926f3",
"projectId": "d531e915-afb0-42e9-9c90-831f0413794e",
"teamId": "a03339d4-4ccc-48ea-8bd9-b506ad83c492"
},
{
"id": "325c3d1f-d2bb-46b2-a708-db26484607c2",
"time": 1616570029306,
"code": "Future{\n Results.Ok(“Patch user data working successfully”)\n}",
"description": "patch user data",
"isGroup": false,
"name": "patch user data",
"parentId": "5287f6bd-2f55-4232-9064-a989ae5926f3",
"projectId": "d531e915-afb0-42e9-9c90-831f0413794e",
"supportedMethods": [
"get",
"post",
"patch",
"delete"
],
"teamId": "a03339d4-4ccc-48ea-8bd9-b506ad83c492"
},
{
"id": "61c392b5-b482-4b2b-be2c-e94f40dfef2c",
"time": 1616570221882,
"code": "Future{Results.Ok(“Add config working successfully”)}",
"description": "addConfig",
"isGroup": false,
"name": "addConfig",
"parentId": "5287f6bd-2f55-4232-9064-a989ae5926f3",
"projectId": "d531e915-afb0-42e9-9c90-831f0413794e",
"teamId": "a03339d4-4ccc-48ea-8bd9-b506ad83c492"
}
]
]]而我想要像他那样的东西:
{
"uuid-1": [{...object-1...}, ...],
"uuid-2": [{...object 1...}, ...],
"uuid-n": [{...object 1...}, ...],
null: [{...object 1}, .... ]
}我们将非常感谢您的任何建议。
发布于 2021-04-07 19:57:16
PlayJson知道如何使用Map[String, SomethingThatHasAWrites],所以您可以先将键转换为String。
虽然不确定如何处理null,但这似乎不是一个好主意,也许可以更改为一个虚拟值?
Json.toJson(data.map {
case (Some(key), value) => key.toString -> value
case (None, value) => "missing" -> value
})发布于 2021-04-07 20:03:37
巧合的是,我尝试了一些类似@Thilo刚才建议的东西。
我在我的组之后添加了一个映射,并将键类型OptionUUID转换为String。
mapField.map(a => (a._1.map(_.toString).getOrElse("root"), a._2))我也意识到PlayJson在这里真的很聪明,当有空值时,它选择了基于列表/数组的结构。现在,当没有机会用空值代替key时,它选择了树/对象结构。
也许,我猜当有非基于字符串的类型代替HashMap键时,PlayJson选择列表结构,而如果HashMap键的类型是数字或字符串,则选择树结构。
新结构如下所示:
{
"root": [
{....},
{....},
{....}
],
"db0f59ea-fbf0-4024-ad54-04ea387223b0": [
{...}
],https://stackoverflow.com/questions/66984576
复制相似问题