2007年9月12日水曜日

Grailsで素敵にJSON

JSonBuilderを使用してみた。結論から言えば、単純なテーブルっぽいのを返すなら使える。複雑なのを返そうとするなら素敵とは言えない。Grails - Ajaxには使い方が少ししか載ってないので、ソースコードを追ってみたらテストケースにいろいろ書いてあった。テストケースはgrails-src-0.6.zipなどを解凍して、test\commons\grails\util\JSonBuilderTests.java。テスト用のparseメソッドでいろいろ試せるのがよい。

render(builder:'json') {
A{
B("BB") {
C("CC") {
// D("DD") 例外が発生する。
}
}
}
}
Dがないと動く。結果は{"A":[{"B":"BB","C":"CC"}]}。配列を使う場合は繰り返し文を使用しないといけないよう。例えば、
render(builder:'json') {
A {
B(C:"C1", D:"D1")
B(C:"C2", D:"D2")
}
}
とは書けない。何かしらeachでもforでも回してあげるとうまくいく。
render(builder:'json') {
A {
BList.each {
B(C:it.C, D:it.D)
}
}
}
こんな感じ。他にもいろいろ試してみた。

render(builder:'json') {
A {
B("BB") {
C {
D(E:"EE", F:"FF") {
G("GG") {
// H("HH") { 例外が発生する。
I {
J("JJ")
}
// }
}
}
}
}
}
}

Hの箇所で例外が発生する。3階層が駄目なのか?上記のコードの結果は下記。結果が微妙すぎる。名前のみのAとCは配列になるみたい。

{"A":[
{"B":"BB", "C":[
{"E":"EE","F":"FF"},
{"G":"GG","I":[
{"J":"JJ"}
]}
]}
]}

とりあえず配列を2つ持つようなのの返し方がわからなかった。あと配列もたせる場合に、その他の要素?を2つ以上持たせる方法もわからなかった。そもそも階層がずれてるあたりは意味がわからない。parseメソッドで例外が発生するタイミングもよくわからないので解析する気にならない。それくらいなら自分でビルダー組んだ方が良いかも。そのうち直るのかな?複雑な使い方はやめた方が良い感じ。

JSonBuilderのソースコードを見たら'a'とか'o'とかでarrayとobjectを何とかしようとしてるみたいだけど、これもよくわからず。今日はここまで。

0 件のコメント: