You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy技术问询:基于Map键名生成含date属性的JSON方法

解决Groovy生成指定格式JSON的问题

你的问题出在collect的用法上:原代码会对输入Map的每个键生成一个包含date和当前键的子数组,最终得到的是二维数组,而不是预期的一维对象数组。

修正思路

  1. 先初始化一个列表,把固定的date对象放进去
  2. 遍历输入Map的所有键,将每个键转换为[name: 键名]的对象,追加到列表中
  3. 最后将这个一维列表转成JSON

修正后的代码

import groovy.json.JsonOutput

// 测试第一种Map
def convertedMap1 = [sessionCampaignName: 'renins_KASKO_May23', sessionMedium: 'Yandex_banners', sessionSource: 'Media']
// 测试第二种Map
def convertedMap2 = [sessionCampaignName: 'olv_May23', sessionTerm: 'greatjob']

def generateDimensionsJson(Map inputMap) {
    // 初始化列表,先加入date对象
    def dimensionsList = [[name: 'date']]
    // 遍历Map的键,添加每个维度对象
    inputMap.each { key, value ->
        dimensionsList << [name: key]
    }
    // 转成格式化的JSON(如果需要压缩可以去掉prettyPrint)
    return JsonOutput.prettyPrint(JsonOutput.toJson(dimensionsList))
}

// 测试输出
println "第一种Map生成的JSON:"
println generateDimensionsJson(convertedMap1)
println "\n第二种Map生成的JSON:"
println generateDimensionsJson(convertedMap2)

输出结果

第一种Map的输出:

[
    {
        "name": "date"
    },
    {
        "name": "sessionCampaignName"
    },
    {
        "name": "sessionMedium"
    },
    {
        "name": "sessionSource"
    }
]

第二种Map的输出:

[
    {
        "name": "date"
    },
    {
        "name": "sessionCampaignName"
    },
    {
        "name": "sessionTerm"
    }
]

补充说明

如果不需要格式化的JSON,直接用JsonOutput.toJson(dimensionsList)即可生成压缩版的JSON字符串。

内容的提问来源于stack exchange,提问作者fujidaon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:25:04