【问题标题】:transform list to list of maps in Groovy将列表转换为 Groovy 中的地图列表
【发布时间】:2021-05-19 06:19:56
【问题描述】:

谁能帮助将列表转换为 Groovy 中的地图列表?

我有一个如下列表

[war, jar]

还有一个名为"value" = 2.0.0的变量

我想将其转换为带有地图的列表[["pack": "war", "ver": "2.0.0"],["pack": jar, "ver": "2.0.0"]]

并创建一个 json。

{
    "ProjectId": "Projects-16",
    "ChannelId": "Channels-41",
    "Version": "2.0.1.0-10",
    "selectedPackages": [{"pack": "war", "ver": "2.0.0"}, {"pack": jar, "ver": "2.0.0"]}]
}

【问题讨论】:

  • 请添加您尝试过的代码以及失败的原因(例如错误、堆栈跟踪、日志等),以便我们对其进行改进。你试过collectcollectEntries吗?
  • 还有["war": "2.0.0", "jar": "2.0.0"][{"war": "2.0.0"}, {"jar": "2.0.0"}]不一样
  • 是的。我厌倦了collect 并且能够形成["war": "2.0.0", "jar": "2.0.0"] 但我不确定如何将所有内容转换为json。
  • 那么,当您的实际问题有所不同时,为什么您的问题会被表述为您在构建地图/地图列表时遇到问题?您是否查看过 JsonOutput 来创建 JSON?
  • 因为,我不确定我创建的地图是否正确。正如您指出的["war": "2.0.0", "jar": "2.0.0"][{"war": "2.0.0"}, {"jar": "2.0.0"}] 不同。我还尝试了list.collect { it -> "{$it: ${value}}" },它给出了[{jar: 4.0}, {war: 4.0}]。但是当我使用JsonBuilder 转换为json 时,它转换为{ "channelId": "Channels-41", "selectedPackages": [ "war: 2.0.0.","jar:2.0.0" ], "version": "2.0.0.7-10", "projectId": "Projects-16" }

标签: json list groovy hashmap


【解决方案1】:

解决办法如下:

import groovy.json.JsonOutput

def packages = ["war", "jar"]
def value = "2.0.0"
def list = packages.collect { [pack : it, ver : value] }
def object = [
    ProjectId: "Projects-16",
    ChannelId: "Channels-41",
    Version: "2.0.1.0-10",
    selectedPackages: list
]
def json = JsonOutput.toJson(object)
println JsonOutput.prettyPrint(json)

JSON 中的每个 {} 实体都是 Groovy 中的一个映射,因此预期的 [{}, {}] 是一个映射列表。您只需要使用 collect 和正确的转换来构造正确的对象。

编辑
我使用列表和变量value 更新了解决方案以根据需要返回准确的 json 输出。

输出是这样的:

{
    "ProjectId": "Projects-16",
    "ChannelId": "Channels-41",
    "Version": "2.0.1.0-10",
    "selectedPackages": [
        {
            "pack": "war",
            "ver": "2.0.0"
        },
        {
            "pack": "jar",
            "ver": "2.0.0"
        }
    ]
}

【讨论】:

  • 这里没问题,但是 GStrings 会产生错误的映射键。最好改用[(it): ...]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 2021-06-21
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多