15

groovy の json ビルダーによって、オブジェクト型の json を生成できます。

def builder = new groovy.json.JsonBuilder()
def root = builder.people {
    person {
        firstName 'Guillame'
        lastName 'Laforge'
        // Named arguments are valid values for objects too
        address(
               city: 'Paris',
               country: 'France',
               zip: 12345,
        )
        married true
        // a list of values
        conferences 'JavaOne', 'Gr8conf'
    }
}
def jsonStr = builder.toString()

このタイプの構文は好きですが、配列型の json を構築するにはどうすればよいですか?

例えば

[
    {"code": "111", "value":"222"},
    {"code": "222", "value":"444"}
]

JsonBuilder()コンストラクターを使用する必要があると書かれているドキュメントをいくつか見つけました。

def mydata = [ ["code": "111", "value":"222"],["code": "222", "value":"444"] ]
def builder = new groovy.json.JsonBuilder(mydata)
def jsonStr = builder.toString()

しかし、私は最初の構文を好みました。配列型のjsonを生成して使用できますか?

4

3 に答える 3

8

あなたが提案する構文は、有効であるとは思えないため、可能ではないようです。などのクロージャー{"blah":"foo"}は groovy にとって意味がなく、構文上の制限によって制約を受けることになります。あなたができる最善のことは、次の範囲内の何かだと思います。

def root = builder.call (
   [
      {
        code "111"
        value "222"
      },
      {code "222"; value "444"}, //note these are statements within a closure, so ';' separates instead of ',', and no ':' used
      [code: "333", value:"555"], //map also allowed
      [1,5,7]                     //as are nested lists
   ]
)
于 2012-12-20T16:08:58.573 に答える
0

結局はビルダーよりコンバージョンの方が好きなのですが、

def json = [ 
            profile: [
                      _id: profile._id,
                      fullName: profile.fullName,
                      picture: profile.picture
                     ]
            ,title: title
            ,details: details
            ,tags: ["tag1","tag2"]
            ,internalTags: ["test"]
            ,taggedProfiles: []
           ] as JSON
于 2012-12-21T02:09:42.963 に答える