2012-03-29 6 views
15

は、私はこのようなJSON形式のメッセージを作成する必要があります。コレクションでjsonbuilderを使用するには?

{ 
    success:true, 
    count:3, 
    data: [ 
    {id:1}, 
    {id:2}, 
    {id:3} 
    ] 
} 

私はこの

import groovy.json.* 

def tasks = [1, 2,3] 
def json = new JsonBuilder() 

json{ 
    success(true) 
    count(tasks.size()) 
    data { 
    tasks.each { 
     data(
     id: it   
    ) 
    } 
    } 
} 

JsonOutput.prettyPrint(json.toString()) 

を試してみましたが、それは動作しません。誰かが私にそれを動作させる方法を示すことができますか?

私は、フォーム [[id: 1], [id: 2], [id: 3]]のリストにタスクリストを変換し、それを「jsonizing」をお勧めしたい

答えて

32

import groovy.json.JsonBuilder 

def tasks = [1, 2, 3] 
def json = new JsonBuilder() 

json{ 
    success(true) 
    count(tasks.size()) 
    data(tasks.collect {[id: it]}) 
} 

println json.toPrettyString() 

私は通常(マップ、例えばリスト)最初Groovyでのデータ構造を生成することを好むし、 JSONに変換します。通常、シリアル化するデータをより詳細に制御でき、シリアル化コードにロジックを含める必要はありません。

import groovy.json.JsonBuilder 

def tasks = [1, 2, 3] 

def data = [ 
    success: true, 
    count: tasks.size(), 
    data: tasks.collect {[id: it]} 
] 

def json = new JsonBuilder(data) 
println json.toPrettyString() 
+1

ちょっと、グルーヴィーな構文です: 'json {...}'?変数名の直後に中かっこ? Groovyの新機能... – Mahesha999

+1

@ Mahesha999 'json'オブジェクトは、呼び出すことのできる型のオブジェクトです。 'json {...}'を実行すると 'json({...}) 'と同じです。これはコードブロックをパラメータとして' json'オブジェクトを呼び出しています。 – epidemian

+0

私はgroovyから何か基本的なものを欠いているに違いありません。 「タイプできる」とはどういう意味ですか?私たちは通常Javaのメソッドをインスタンス/オブジェクト/変数の型ではなく直接呼び出します。 – Mahesha999

関連する問題