2016-10-28 4 views
0

データベースから取得するデータに基づいて動的にjsonを構築しようとしています。オープニング '['が "ルート"になるまであなたは言うことができると思います。名前と値を持つ次の部分は動的で、dbから取得した結果の数に基づいています。私はdbに照会して、その結果をjsonに追加するというアイデアを反復することでした。ルートセクションにjsonBuilderを使用し、jsonSlurperでループして各セクションを追加できますか?私が見た例のほとんどは、根を扱って、一度 "slurp"して2つを結合するので、複数のセクションをループして追加する別の方法を試すべきかどうかは分かりませんでした。Groovyを使って動的にjsonを構築する

ヒントをいただければ幸いです。ありがとう。

{ 
     "hostname": "$hostname", 
     "path": "$path", 
     "extPath": "$extPath", 
     "appName": "$appName", 
     "update": {"parameter": [ 
       { 
      "name": "$name", 
      "value": "$value" 
      }, 
       { 
      "name": "$name", 
      "value": "$value" 
      } 
     ]} 
    } 

EDIT:だから何私がやってしまったことは、単に最初のブロックを作成するためのStringBuilderを使用していたし、その後のセクションを追加します。多分それを行う最も優雅な方法ではないかもしれませんが、それは動作します!私が正しくあなたの説明を持って、データが(それはメモリに生きることができます)非常に大きなではない場合、私は(グルーヴィーで作業するのは非常に簡単です)Mapオブジェクトを構築し、それを変換したい場合は

//Create the json string 
    StringBuilder json = new StringBuilder("""{ 
     "hostname": "$hostname", 
     "path": "$path", 
     "extPath": "$extPath", 
     "appName": "$appName", 
     "update": {"parameter": [""" 
    ) 


    //Append 
    sql.eachRow("""<query>""", 
    { params -> 
    json.append("""{ "name": "params.name", "value": "params.value" },"""); 
    } 
    ) 

    //Add closing json tags 
    json.append("""]}}""") 

答えて

1

後でJSONに転送します。このような何か:

def data = [ 
    hostname: hostname, 
    path: path, 
    extPath: extPath, 
    appName: appName, 
    update: [parameter: []] 
] 

sql.eachRow(sqlStr) { row -> 
    data.update.parameter << [name: row.name, value: row.value] 
} 

println JsonOutput.toJson(data) 
+0

提案していただきありがとうございます。 – ssbsts

+0

助けがあれば、答えを受け入れるのがいいですか? – sensei

0

あなたはGrailsのとGroovyを使用している場合は、grails.converters.JSONを利用することができます。これは、人のオブジェクトタイプのために静的に定義された名前の設定になります

JSON.createNamedConfig('person') { 
    it.registerObjectMarshaller(Person) { 
     Person person -> 
     def output = [:] 
     output['name'] = person.name 
     output['address'] = person.address 
     output['age'] = person.age 
     output 
    } 
} 

まず、JSONという名前の設定を定義します。

JSON.use('person') { 
    Person.findAll() as JSON 
} 

これで、名前、アドレス、年齢をすべて1人のJSONリクエストでデータベース内のすべての人に返します。この状況でグレイルを使用しているのかどうかはわかりませんが、純粋なGroovyは別の答えを求めています。

関連する問題