我正在使用Jasper Studio 5.5并尝试使用JSON-Datasource创建报告。我的示例json-file看起来如下:
{
"dto": [
{
"item": {
"active": 1
},
"itemProjects": [
{"id": 1},
{"id": 2}
]
},
{
"item": {
"active": 1
},
"itemProjects": [
{"id": 3},
{"id": 4}
]
}
]}
总结一下:我有一系列“dto” - 对象。每个dto包含一个对象“item”和一个“itemProjects”数组。 使用Select-Query“dto”和Fields“item.active”允许我读取属性“acttive”。但是我还没有找到一种从子数组中读取属性的方法。我尝试使用不同的Select-Strings和Fieldnames,但没有成功。我也尝试将数组作为参数传递给子报表,但这也没有用(生成的报表显示空字段)。
有谁知道,如何正确地从JSON中的数组中读取数据?
最好的问候。答案 0 :(得分:1)
我在json中照顾我的对象结构,适合报告。从逻辑上讲,你接收主报告中的完整json。 然后我创建一个子报告并告诉子报告只选择JSon的一部分。例如,我的主报表使用数据源表达式调用子报表:
((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("data.bezirkResultatAbstimmungVorlage")
data.bezirkResultatAbstimmungVorlage然后在json中看起来像这样:
"data":
{
"bezirkResultatAbstimmungVorlage":
[
{
"vorlageNummer": "4",
"offiziellerAbstimmungBezeichnung": "Ja für Mundart im Kindergarten", ... ... ...
然后我在子报表中选择json的这一部分的字段。如果然后将这些字段放在详细信息带中jasper将自动循环遍历json数组的所有元素。
您描述的方式应该实际上有效。请确保在"数据集和查询对话框中包含json作为数据源"
答案 1 :(得分:0)
我将通过创建子数据集来解决此问题,因为您有两个要迭代的数组。
在主报告的详细信息区域中,添加一个具有新DataSet的列表元素,并将其赋予JRDatasource Expression:
(((net.sf.jasperreports.engine.data.JsonDataSource)$ P {REPORT_DATA_SOURCE})。subDataSource(“ dto”)
创建字段:active,它指向item.active,
在第一个元素右侧的详细信息区域中添加第二个列表元素,并带有一个新的DataSet,并为其提供以下JRDatasource表达式:
(((net.sf.jasperreports.engine.data.JsonDataSource)$ P {REPORT_DATA_SOURCE})。subDataSource(“ itemProjects”)
创建指向id的id字段。
现在您应该能够获取每个对象的项目和项目项目列表。