2012-01-20 1 views
1

オブジェクトのリストからjsonをビルドしたいと思います。これまで私はjsonにオブジェクトを1つしか生成できませんでした。私は何が欠けていますか?オブジェクトのリストをjsonに変換するより良い方法はありますか?groovyのオブジェクトリストからjsonをビルドします

private static List<ProductAlertsResponse> executeSelection(String query) 
{ 
    List<ProductAlertsResponse> prodAlerts=new ArrayList<ProductAlertsResponse>() 
    sql.eachRow(query) 
    { 
     ProductAlertsResponse prodAlert=new ProductAlertsResponse((String)it.id,(String)it.name,(String)it.description,(String)it.active,(String)it.release_date) 

     //I was converting it into a List before, but then I thought it would be better to do with list of classes 
     /*String[] rows=new String[5] 
     rows[0]=(String)it.id 
     rows[1]=(String)it.name 
     rows[2]=(String)it.description 
     rows[3]=(String)it.active 
     rows[4]=(String)it.release_date 

     result.add(rows)*/ 

/*Also feel free to comment is this right way to put in list (above commented code)*/ 

     prodAlerts.add(prodAlert) 
    } 
    return prodAlerts 
} 

static main(args) { 
    AppProperties.load() 
    sql= Sql.newInstance("jdbc:oracle:thin:@"+AppProperties.get("hostname")+":"+AppProperties.get("port")+":"+AppProperties.get("service"), AppProperties.get("username"), AppProperties.get("password"),"oracle.jdbc.OracleDriver") 

    List result=executeSelection("select ID,NAME,DESCRIPTION,ACTIVE,RELEASE_DATE from productinfo where ACTIVE='A'") 

    def builder = new groovy.json.JsonBuilder() 

    def root=builder.response{ 

     product_alerts{ 
      result.each{ 
       //JsonOutput.toJson(it) 
       id it.getId() 
       name it.getName() 
       description it.getDescription() 
       active it.getActive() 
      } 

     } 

    } 
    println builder.toPrettyString() 
} 

マイ出力

{ 
    "response": { 
     "product_alerts": { 
      "id": "6", 
      "name": "ABC1", 
      "description": "Test2", 
      "active": "A" 
     } 
    } 
} 

答えて

6

使用def builder = new groovy.json.JsonBuilder(result)

更新

それが今である少なくとも...この

def json = new groovy.json.JsonBuilder() 
def result1 = json { 
    response result 
} 
println json.toPrettyString() 
+0

感謝を試してみてくださいすべてのオブジェクトをjsonに変換します。もし私がルートタグ '応答'を持っていたらどうしますか? – abi1964

+1

ちょっとしたヒント、ルートノードを追加するだけでいいのであれば、 'new groovy.json.JsonBuilder([response:result])'を使ってください。 – OverZealous

+0

@OverZealous:ありがとう、素晴らしいチップ、またあなたは継続を見てみてください[質問はこちら](http://stackoverflow.com/questions/8969545/why-do-i-keep-getting-object-reference-on -server-while-it-works-fine-on-a-local)? – abi1964

関連する問題