首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala Play JSON:将hashmap转换为json对象,而不是数组

Scala Play JSON:将hashmap转换为json对象,而不是数组
EN

Stack Overflow用户
提问于 2021-04-07 18:51:33
回答 2查看 35关注 0票数 0

对于给定的HashMap结构:

代码语言:javascript
复制
scala.collection.immutable.Map[scala.Option[java.util.UUID], scala.collection.immutable.List[crm.v1.auto.generated.customapis.CustomapisPublic]]

Json.toJson会产生这样的结果:

代码语言:javascript
复制
[
    [
        "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"
            }
        ]
    ]]

而我想要像他那样的东西:

代码语言:javascript
复制
{
 "uuid-1": [{...object-1...}, ...],
 "uuid-2": [{...object 1...}, ...],
 "uuid-n": [{...object 1...}, ...],
 null: [{...object 1}, .... ]
}

我们将非常感谢您的任何建议。

EN

回答 2

Stack Overflow用户

发布于 2021-04-07 19:57:16

PlayJson知道如何使用Map[String, SomethingThatHasAWrites],所以您可以先将键转换为String。

虽然不确定如何处理null,但这似乎不是一个好主意,也许可以更改为一个虚拟值?

代码语言:javascript
复制
 Json.toJson(data.map { 
    case (Some(key), value) => key.toString -> value 
    case (None, value)      => "missing"    -> value
 })
票数 0
EN

Stack Overflow用户

发布于 2021-04-07 20:03:37

巧合的是,我尝试了一些类似@Thilo刚才建议的东西。

我在我的组之后添加了一个映射,并将键类型OptionUUID转换为String。

代码语言:javascript
复制
mapField.map(a  => (a._1.map(_.toString).getOrElse("root"), a._2))

我也意识到PlayJson在这里真的很聪明,当有空值时,它选择了基于列表/数组的结构。现在,当没有机会用空值代替key时,它选择了树/对象结构。

也许,我猜当有非基于字符串的类型代替HashMap键时,PlayJson选择列表结构,而如果HashMap键的类型是数字或字符串,则选择树结构。

新结构如下所示:

代码语言:javascript
复制
{
    "root": [
        {....},
        {....},
        {....}
    ],
    "db0f59ea-fbf0-4024-ad54-04ea387223b0": [
        {...}
    ],
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66984576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档