2009-08-07 5 views
1

主な質問: Groovyの変数の型を決定するために使用できる演算子、プロパティなどはどれですか?Groovyの動的型のタイプ

背景:私は、任意に深くネストされた辞書データ構造を持っている

。 Grailsコントローラでrequest.JSONを呼び出した結果です。最初に、特定のキーが適切なタイプの辞書にあることを確認したいと思います。私がこれを実装したいのは、プロトタイプのデータ構造を作成し、データ構造を比較するメソッドを定義することです。次のようなものがあります。

def prototype = [ username: "JennyJeans", 
        message: [ subject: "Hello World!", 
           body: "Will write soon." 
          ] 
       ] 

もちろん、ここの文字列の内容は重要ではありません。その後、私の行動に、私はこのような検証:だから

if(similarDataStructure(prototype, request.JSON)) { 
// XXX 
} else { 
// report error 
} 

similarDataStructure方法は何をするのでしょうか?擬似コードの場合:

def similarDataStructure(a, b) { 
    if(type(a) != type(b)) return false 

    if(type(a) == dictionary) { 
    for key in a: 
     if(!similarDataStructure(a[key], b[key])) return false 
    } 

    return true 
} 

深い妥当性検査を行うには、より良い方法を考えることができます。

+0

を次のコードを試してみてください、私は本当に実現しようとしていますがGrailsのためのJSONスキーマバリデータが何であるかを発見しました –

答えて

1

種類を取得するには、あなたがa.class、b.classを使用し、それらを比較することができますif(a.class == b.class) { }

確認することが辞書だ場合は、呼び出すことができますa instanceof Mapを。

しかし、自分は;-)それを見るためにGroovyのコンソールで、さらに思想に

def src = [ username: "JennyJeans", 
      message: [ subject: "Hello World!", 
         body: "Will write soon."] 
     ] 

def p1 = [ username: "JennyJeans", 
      message: [ subject: "Hello World!", 
         body: "Will write soon."] 
     ] 

def p2 = [ username: "JennyJeans", 
      message: [ subject: "Hello World!", 
         body: "Will read soon."] 
     ] 

println src == p1 
println src == p2