Groovy中的动态类型的类型

时间:2009-08-07 20:04:21

标签: json grails 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
}

如果您能想出更好的深度验证方法,请告诉我。

1 个答案:

答案 0 :(得分: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