Jasper Studio:带子阵列的JSON数据源

时间:2013-12-16 15:00:52

标签: json jasper-reports

我正在使用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中的数组中读取数据?

最好的问候。

2 个答案:

答案 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字段。

现在您应该能够获取每个对象的项目和项目项目列表。