我试图从json文件中获取一组对象,但我遇到了问题。
path.get("wgcTournaments.items")
我应该使用什么路径来获取项目中的所有项目(item0,item1,item2 ...)?
能否请你给我一些建议。
Json示例
{
"wgcTournaments": {
"items": {
"jcr:primaryType": "nt:unstructured",
"item0": {
"jcr:primaryType": "nt:unstructured",
"test": "test",
"test1": "test1"
},
"item1": {
"jcr:primaryType": "nt:unstructured",
"test": "test",
"test1": "test1"
},
"item2": {
"jcr:primaryType": "nt:unstructured",
"test": "test",
"test1": "test1"
},
"item3": {
"jcr:primaryType": "nt:unstructured",
"test": "test",
"test1": "test1"
}
}
}
}
从项目对象中过滤项目的最佳方法,但我不了解如何使用json路径。
答案 0 :(得分:0)
您正在尝试将对象反序列化为对象数组。您的代码或JSON(最有可能)是错误的。
如果要将items
反序列化为数组,则JSON应如下所示:
{
"wgcTournaments": {
"items": [
{
"jcr:primaryType": "nt:unstructured",
"item0": {},
"item1": {},
"item2": {},
"item3": {}
}
]
}
}
否则,如果您的JSON正确,您应该使用以下行反序列化您的JSON:
path.getObject("wgcTournaments.items", MyClass.class)
编辑:编辑后,这似乎就是您想要的:
如果您的JSON正确且您确实想要一个数组,我假设每个itemX
是一个键,{}
是相应的值。在这种情况下,您必须知道JSON中不能有关联数组,您应该使用自定义解决方案对其进行反序列化,因为关联数组将转换为对象。
答案 1 :(得分:0)
最后,我找到了一个解决方案。
如果你想从项目中获取项目,你需要使用这个json Path
path.getObject("wgcTournaments.items*.
find{it.key.startsWith('item')}.value",ItemClass[].class);
注意: 它是RestAssured,他使用Gpath更多细节,你可以在这里找到 http://docs.groovy-lang.org/latest/html/documentation/#_gpath