Groovy 如何在POGO中实例化POGO列表

Groovy 如何在POGO中实例化POGO列表,groovy,Groovy,我试图在复杂的JSON结构上应用Groovy对象模型 我实现了对这个JSON建模所需的所有POGO,但我刚刚意识到默认的映射构造函数并没有自动用列表实例化对象(我猜这是预期的行为) class-Foo{ 字符串fooKey @凌驾 字符串toString(){ 返回“Foo{”+ “fooKey=”+fooKey+'\''+ '}' } } 托托班{ 福福 列出食物 @凌驾 字符串toString(){ 返回“Toto{”+ “foos=“+foos”+ “,foo=“+foo+ '}' } }

我试图在复杂的JSON结构上应用Groovy对象模型

我实现了对这个JSON建模所需的所有POGO,但我刚刚意识到默认的映射构造函数并没有自动用列表实例化对象(我猜这是预期的行为)

class-Foo{
字符串fooKey
@凌驾
字符串toString(){
返回“Foo{”+
“fooKey=”+fooKey+'\''+
'}'
}
}
托托班{
福福
列出食物
@凌驾
字符串toString(){
返回“Toto{”+
“foos=“+foos”+
“,foo=“+foo+
'}'
}
}
公共静态void main(字符串[]args){
Toto Toto=新Toto([“foo”:[“fooKey”:“fooVal”],“foos”:[[“fooKey”:“fooVal”]]))
普林顿托托酒店
println toto.foo foo实例
println toto.foos instanceof List
println toto.foos.get(0)Foo实例
println“”
println“------------”
println“”
Foo Foo=新Foo()
println foo foo实例foo
普林特福
}
其输出如下:

Toto{foos=[[fooKey:fooVal]], foo=Foo{fooKey='fooVal'}}
true
true
false <----- This is the problem

--------------

true
Foo{fooKey='null'}
Toto{foos=[[fooKey:fooVal]],foo=foo{fooKey='fooVal'}
真的
真的

false感谢hsan和cfrick提到没有“本地”方法来处理这个问题


最好的解决方案是使用JSON解析库。我之所以选择Jackson,是因为它已经在Groovy执行上下文中的其他地方使用过,这允许我重用依赖项。

似乎能够将JSON解析为复杂对象
@Grab('com.google.code.gson:gson:2.8.5')import com.google.gson.gson Toto Toto=new gson().fromJson('{“foo”:{“fooKey”:“fooVal”},“foos”:[{“fooKey”:“fooVal”}],Toto)
@hsan感谢您的回复,但我希望Groovy能以一种“本机”的方式处理这个问题,这是不存在的,我担心:/Groovy不会把孩子们变成合适的班级。它将只分配地图列表。您必须事先对数据进行定型(例如,
json.foos=json.foos.collect{new Foo(it)}
。这会很快变得乏味,您最好使用GSON、Jackson等。。。
Toto{foos=[[fooKey:fooVal]], foo=Foo{fooKey='fooVal'}}
true
true
false <----- This is the problem

--------------

true
Foo{fooKey='null'}