Json Groovy中的动态类型

Json Groovy中的动态类型,json,grails,groovy,Json,Grails,Groovy,主要问题:哪些运算符、属性等可用于确定Groovy中变量的类型 背景: 我有一个任意深度嵌套的字典数据结构。它是在Grails控制器中调用request.JSON的结果。首先,我想验证字典中的某些键是否具有适当的类型。我想要实现这一点的方法是创建一个原型数据结构,并定义一个比较数据结构的方法。比如: def prototype = [ username: "JennyJeans", message: [ subject: "Hello World!",

主要问题:哪些运算符、属性等可用于确定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
}

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

要获得类型,你可以使用a.class、b.class并比较它们:
如果(a.class==b.class){}

要检查它是否是字典,可以调用:
a instanceof Map

但是,请在Groovy控制台中尝试以下代码,以便自己查看;-)


要获取类型,可以使用a.class、b.class并比较它们:
if(a.class==b.class){}

要检查它是否是字典,可以调用:
a instanceof Map

但是,请在Groovy控制台中尝试以下代码,以便自己查看;-)


进一步思考,我发现我真正想要实现的是一个用于GrailsOn的JSON模式验证器。进一步思考,我发现我真正想要实现的是一个用于Grails的JSON模式验证器
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