gpt4 book ai didi

java - 在 Jaspersoft 中处理复杂类型(列表和对象)的正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:58 24 4
gpt4 key购买 nike

请考虑使用以下文档的 MongoDB 集合:

"_id": "clientsInfo"
"data": {
"clientsList" : [
{
"name" : "Mike",
"country" : "USA"
},
...
]
}

像这样设置数据集并定义查询之后...

{
collectionName:'projectA',
findQuery: {
'_id':'clientsInfo',
},
findFields: {
'_id':0,
'data.clientsList':1
},
}

...我可以使用以下表达式在 JasperSoft Studio 中的文本字段内显示获取的数组(java.util.List 类型)的第一项:

$F{data.clientsList}.get(0)

但是,考虑到我想在名称/国家/地区表中展示整个数据...

问题1:我如何访问任何字典字段?尝试get method我收到 The method get(String) is undefined for the type Object. 错误。但是,知道该对象是 com.mongodb.BasicDBObject 的实例,它应该继承该方法(请参阅 doc )。

我还尝试将对象转换为org.json.JSONObject,但随后出现net.sf.jasperreports.engine.fill.JRExpressionEvalException:计算源文本表达式时出错:(JSONObject)$F{data.clientsList}.get(0)错误。

问题2:假设我们已经解决了第一个问题...我如何迭代列表以不仅访问第一项,而且根据数组长度访问所有项目?是否可以在 JasperSoft 表达式编辑器中使用 for 循环语句? (if-then-else seems to be available)

提前致谢,任何为我指明正确方向的线索将不胜感激。

最佳答案

万一有人遇到和我一样的情况,我必须说整个方法是错误的。

这并不是进行一个简单的查询,返回格式化为对象或对象列表的大块复杂数据,然后使用 JasperSoft Studio 对其进行操作。相反,我必须做的是设计一个更详细的查询,它返回我想要直接使用的简单字段。这个怎么做?通过使用聚合框架。

所以,通过改变这个......

{
collectionName:'projectA',
findQuery: {
'_id':'clientsInfo',
},
findFields: {
'_id':0,
'data.clientsList':1
},
}

...为此...

{
runCommand: {
aggregate : 'projectA',
pipeline : [
{'$match': {'_id':'clientsInfo'}},
{'$project': {'data.clientsList': 1}},
{'$unwind': '$data'},
{'$unwind': '$data.clientsList'}
]
}
}

...这是我获取 namecountry 字段的方式,以便在文本字段、表格等中使用它们。

关于java - 在 Jaspersoft 中处理复杂类型(列表和对象)的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41396004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com