【问题标题】:Jasper Studio: JSON-Datasource with Sub-ArraysJasper Studio:带有子数组的 JSON 数据源
【发布时间】:2023-04-07 04:56:01
【问题描述】:

我正在使用 Jasper Studio 5.5 并尝试使用 JSON 数据源创建报告。我的示例 json 文件如下所示:

{
"dto": [
    {
      "item": {
            "active": 1
      },
       "itemProjects": [
            {"id": 1},
            {"id": 2}
        ]
    },
    {
        "item": {
            "active": 1
        },
        "itemProjects": [
            {"id": 3},
            {"id": 4}
        ]
    }
]}

总结一下:我有一个“dto”对象数组。每个 dto 都包含一个对象“item”和一个“itemProjects”数组。 使用选择查询“dto”和字段“item.active”允许我读取属性“active”。但是我还没有找到从子数组中读取属性的方法。我尝试使用不同的 Select-Strings 和 Fieldnames,但没有成功。我也尝试将数组作为参数传递给子报表,但这也没有用(生成的报表显示空字段)。

有谁知道,如何正确地从 JSON 数组中的数组中读取数据?

最好的问候。

【问题讨论】:

标签: json jasper-reports


【解决方案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的字段。如果您随后将这些字段放入 detail-band jasper 将自动循环遍历您的 json-array 的所有元素。

您描述的方式应该确实有效。请确保将 json 作为数据源包含在“数据集和查询对话框”中

【讨论】:

    【解决方案2】:

    我会通过创建子数据集来解决这个问题,因为您有两个要迭代的数组。

    在主报表的详细信息带中,添加一个带有新 DataSet 的列表元素,并为其赋予 JRDatasource 表达式:

      ((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("dto")
    

    创建字段:active,指向item.active,

    将第二个列表元素添加到第一个带有新数据集的右侧的详细信息带中,并为其提供以下 JRDatasource 表达式:

      ((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("itemProjects")    
    

    创建指向 id 的 id 字段。

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

    【讨论】:

      猜你喜欢
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多