Search code examples
groovy

Generate JSON based on map keys names


I'm new to Groovy and I've a task. I have a Map looks like:

[sessionCampaignName:renins_KASKO_May23, sessionMedium:Yandex_banners, sessionSource:Media] or [sessionCampaignName:olv_May23, sessionTerm:greatjob]

How can i build a JSON based on map keys names + additional json property called date like (for example lets take 1st case):

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

Tried with:

List dimensionsList = convertedMap.collect {dimensionName, dimensionValue ->
        [
            [
                name: 'date'
            ],
            [
                name: dimensionName
            ]
        ]
      }
String jsonDimensions = JsonOutput.toJson(dimensionsList)

But didn't reach what I expected to reach. Any tips?


Solution

  • Try as below-

    def map = [sessionCampaignName: 'renins_KASKO_May23', sessionMedium: 'Yandex_banners', sessionSource: 'Media']
    
    List dimensionsList = [['name': 'date']] + map.keySet().collect { key ->
        ['name': key]
    }
    
    /* 
    List dimensionsList = map.keySet().collect([[name: 'date']]) { key ->
        [name: key]
    }
    */
    
    String jsonDimensions = new groovy.json.JsonBuilder(dimensionsList).toPrettyString()
    println jsonDimensions
    

    Output:

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