Groovy:将数组转换为JSon

时间:2012-05-24 14:09:33

标签: json grails groovy

是Groovy的新手,我在将数组转换为JSON时遇到问题。计算出的JSON应该具有我的数组列表中的所有值,但它只存储最后一个。这是代码:

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()

可以尝试在这里运行代码: http://groovyconsole.appspot.com/

预期输出在这里:

{
"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
            }
        ]
    }
]
}

1 个答案:

答案 0 :(得分:6)

这样的事情似乎给出了你想要的结果:

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()