Will
Will

Reputation: 482

Groovy: Convert Array to JSon

Am new to Groovy and am having trouble converting an array to JSON. The JSON computed should have all the values from my array list, but it is storing only the last one. Here is the code:

def arraylist = [["0",2],["1",8],["2",6],["3",8],["4",3]]

def arraysize = arraylist.size()

def builder = new groovy.json.JsonBuilder()
 builder ({
       cols([
                {
                    "id" "hours"
                    "label" "Hours"
                    "type" "string"
                },
                {
                    "id" "visitor"
                    "label" "Visitors"
                    "type" "number"
                }
           ])

         rows([
                {
                        for( i in 0..< arraysize )
                        {
                        c([
                             {
                                 "v" arraylist[i][0]
                             },
                             {
                                 "v" arraylist[i][1]
                             }
                         ])
                        }//for

                }
           ])
})

println builder.toPrettyString()

Can try running the code here: http://groovyconsole.appspot.com/

Expected output is here:

{
"cols": [
    {
        "id": "hours",
        "label": "Hours",
        "type": "string"
    },
    {
        "id": "visitor",
        "label": "Visitors",
        "type": "number"
    }
],
"rows": [
    {
        "c": [
            {
                "v": "0"
            },
            {
                "v": 2
            }
        ]
    },
    {
        "c": [
            {
                "v": "1"
            },
            {
                "v": 8
            }
        ]
    },
    {
        "c": [
            {
                "v": "2"
            },
            {
                "v": 6
            }
        ]
    },
    {
        "c": [
            {
                "v": "3"
            },
            {
                "v": 8
            }
        ]
    },
    {
        "c": [
            {
                "v": "4"
            },
            {
                "v": 3
            }
        ]
    }
]
}

Upvotes: 1

Views: 12462

Answers (1)

tim_yates
tim_yates

Reputation: 171184

Something like this seems to give the result you wanted:

def arraylist = [["0",2],["1",8],["2",6],["3",8],["4",3]]

def builder = new groovy.json.JsonBuilder()
builder {
  cols( [
    [ id: "hours",   label: "Hours",    type: "string" ],
    [ id: "visitor", label: "Visitors", type: "number" ] ] )

  rows( arraylist.collect { pair -> [ c: pair.collect { item -> [ v: item ] } ] } )
}

println builder.toPrettyString()

Upvotes: 7

Related Questions