如何将 JSON 数组值传递到 Jasper Reports 子报表中?

2023-12-10

Jasper 报告和子表有问题。

我正在使用以下 JSON 格式:

[
  {
    "dataObjects": [
      {
        "objectId": "025b3873ebe640aa9d6a34f9306548ae",
        "employeeFullName": "John Smith",
        "employeeGrade": "GS12"
      },
      {
        "objectId": "08b9300f62dc498f86c675ac5897b4c9",
        "employeeFullName": "Bill Johnson",
        "employeeGrade": "GS14"
      }
    ]
  },
  {
    "dataObjects": [
      ...
    ]
  },
  {
    "dataObjects": [
      ...
    ]
  },
  {
    "dataObjects": [
      ...
    ]
  }
]

数据以四个 JSON 对象的数组形式返回。每个对象都包含 .dataObjects 下的查询结果

在本例中,我需要能够将这些数据显示为四个单独的子报告、图表。

在数组的情况下,我没有看到将数据从父报表传递到子报表的方法。

重新格式化数据给了我:

{
  "report0": {
    "dataObjects": [
      {
        "objectId": "025b3873ebe640aa9d6a34f9306548ae",
        "employeeFullName": "John Smith",
        "employeeGrade": "GS12"
      },
      {
        "objectId": "08b9300f62dc498f86c675ac5897b4c9",
        "employeeFullName": "Bill Johnson",
        "employeeGrade": "GS14"
      }
    ],
  },
  "report1": {
    "dataObjects": [
      ...
    ]
  },
  "report2": {
    "dataObjects": [
      ...
    ]
  },
  "report3": {
    "dataObjects": [
      ...
    ]
  }  
}

使用这个效果很好:

<subreport>
  <reportElement x="20" y="10" width="260" height="260" uuid="6a319da0-bd78-4f44-8445-e03b9a62cc0f"/>
  <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("report0.dataObjects")]]></dataSourceExpression>
  <subreportExpression><![CDATA["quad_1.jrxml"]]></subreportExpression>
</subreport>

但我需要能够在不重新处理数据的情况下做到这一点,我需要这样的东西,这是行不通的:

<subreport>
  <reportElement x="20" y="10" width="260" height="260" uuid="6a319da0-bd78-4f44-8445-e03b9a62cc0f"/>
  <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("[0].dataObjects")]]></dataSourceExpression>
  <subreportExpression><![CDATA["quad_1.jrxml"]]></subreportExpression>
</subreport>            

广泛的谷歌搜索没有找到任何关于使用 json-list 的信息。想法?

这被标记为重复项,但重复项并没有解决我遇到的问题。

我需要将数据传递给子报表,数组中的每个条目都会传递到一个单独的子报表。我可以解决这个问题,可能,如所描述的,但要求是子报告。


这可以通过 JSONQL 来实现,JSONQL 是最初 JSON 语言的更强大的替代品。

您的主要报告可能如下所示(为了简洁起见,我重复使用相同的子报告):

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.9.0.final using JasperReports Library version 6.9.0-cb8f9004be492ccc537180b49c026951f4220bf3  -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Report" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="749076bd-1ea5-4847-85e1-cf88b11c9ef6">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="DataAdapter.xml"/>
    <queryString language="jsonql">
        <![CDATA[[0]]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <summary>
        <band height="160" splitType="Stretch">
            <subreport>
                <reportElement x="0" y="0" width="550" height="40" uuid="33bba077-fd38-4db3-b2ad-56c21a18105f"/>
                <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("dataObjects")]]></dataSourceExpression>
                <subreportExpression><![CDATA["SubReport.jasper"]]></subreportExpression>
            </subreport>
            <subreport>
                <reportElement positionType="Float" x="0" y="40" width="550" height="40" uuid="bb8ab5c7-0fe8-4398-8efc-6d648e6a3a2c"/>
                <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("^[1].dataObjects")]]></dataSourceExpression>
                <subreportExpression><![CDATA["SubReport.jasper"]]></subreportExpression>
            </subreport>
            <subreport>
                <reportElement positionType="Float" x="0" y="80" width="550" height="40" uuid="001d79d0-e850-41a9-8995-f55d6e96bc45"/>
                <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("^[2].dataObjects")]]></dataSourceExpression>
                <subreportExpression><![CDATA["SubReport.jasper"]]></subreportExpression>
            </subreport>
            <subreport>
                <reportElement positionType="Float" x="0" y="120" width="550" height="40" uuid="4d7d085b-1694-40b2-9e10-81428b1a9165"/>
                <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("^[3].dataObjects")]]></dataSourceExpression>
                <subreportExpression><![CDATA["SubReport.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </summary>
</jasperReport>

这里重要的部分是查询:

  • 主要查询,[0],非常明显,它只是选择数组中的第一项,因此对于第一个子报表,您只需要应用subDatasource()dataObjects key
  • 后续查询仅沿 JSON 树向上传播(^) 选择要传递到其各自子报表的适当源对象
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 JSON 数组值传递到 Jasper Reports 子报表中? 的相关文章

随机推荐

  • 通过反射传递引用嵌套结构

    type Client struct Id int Age int PrimaryContact Contact Name string type Contact struct Id int ClientId int IsPrimary b
  • 在 Razor 中生成动态 XML

    我在 ASP NET 之外使用 Razor 从模板生成 XML 文档 我有以下代码
  • 使用 iText7 从 PDF 中提取文本。如何提高其性能?

    目前 我使用此代码从矩形 区域 中提取文本 public static class ReaderExtensions public static string ExtractText this PdfPage page Rectangle
  • 如何在 Grails 2.0 中从 war 文件中排除资源?

    我的 Grails 2 应用程序中有一些测试数据 其中包含一些特殊内容 图像 视频等 在构建战争时不应包含这些内容 在开发时 这些文件存储在web app content 那么问题来了 在生产环境构建战争时如何排除它们呢 在我的搜索过程中我
  • 从上下文菜单复制文件的父目录路径

    我正在学习批处理脚本 因为它对于设置 Windows 用户选择的一些快速自定义上下文菜单选项来获取文件及其父目录的路径非常有用 现在我知道以下命令将传递的参数作为文件路径并将其复制到剪贴板 cmd c echo set p 1 clip 但
  • Extjs网格面板一列背景颜色更改另一列值

    我有一个 Extjs 编辑器网格面板 在其中我必须根据另一列值的值更改一列的 css 那么如何做到这一点我无法使用渲染器功能 因为它在 onload 上工作还有其他方式我附加代码吗其中我有性别列和 ID 列 因此当性别列选择男性时 ID 的
  • 更改不同分辨率下的 flexbox-direction

    为什么在低于 800px 的分辨率下 flex direction 不会改变 这些项目仍然在一排 如果我想更改不同分辨率的顺序 也会发生同样的情况 这是 HTML 和 CSS body font weight bold text align
  • LDAPS 未与 PHP 连接

    我在使用 Windows 连接到安全 LDAP 服务器时遇到问题 而且我在网上到处都看到同样的情况 但到目前为止还没有有效的解决方案 我尝试过同时使用 IIS 和 WAMPSERVER 我已将 libeay32 dll 和 ssleay32
  • 在 Node.js 中等待多个回调的惯用方法

    假设您需要执行一些依赖于某些临时文件的操作 自从 我们这里讨论的是 Node 这些操作显然是异步的 等待所有操作完成的惯用方法是什么 知道什么时候可以删除临时文件吗 这是一些显示我想要做什么的代码 do something tmp file
  • 在活动之间传递自定义对象

    我尝试过在这里和许多其他网站找到的许多不同的解决方案 但我就是无法使其工作 我在一项活动中有一个对象 公寓 该对象将在另一项活动中使用 该活动从类 MyMapOverlayItem 启动 并应启动应在其中使用 Apartment 对象的 A
  • 如何使安装在不同aws实例上的docker中的Hazelcast节点相互交互?

    我有三台 aws 机器 在上面设置了三个 docker 容器 并在其上安装了 hazelcast 3 5 4 ubuntu 将 aws 配置设置为我通常使用 Hazelcast 执行的操作 没有 docker 节点不会相互发现 如何让他们互
  • 在 ASP.NET RegularExpressionValidator 中使正则表达式不区分大小写

    给定这个正则表达式 0 9 s lbs kg kgs 我如何使其不区分大小写 我试图在 net 正则表达式验证器中使用它 因此我需要在模式中指定不区分大小写 我无法以编程方式使用 RegexOptions 因为我在 RegularExpre
  • 检查矩阵中的列或对角线是否 = x(不使用 Numpy)

    我可以使用此代码来检查矩阵中的一行是否 x q 1 2 1 1 2 1 2 1 2 answer sum row for row in q for i in range 0 len q if answer i 6 print Player
  • rbenv 安装的 ruby​​ 2.1.2 无法在 MAC OSX 10.9.2 上加载此类文件 -- zlib

    我通过 rbenv 安装 ruby 2 1 2 rbenv 是通过 homebrew 在我的 MAC OSX 10 9 2 上安装的 ruby global 成功设置为 2 1 2 但是当我尝试运行 gem install 时 出现以下错误
  • 如何使三根柱子高度相同?

    我已经查看了这个问题的十几个问题和答案 但似乎没有一个适合我的情况的最佳答案 我有一个页面 http awesomealbums info 1062 chris cornell 具有三个垂直列 我希望各列看起来具有相同的高度 无论其中是否有
  • 使用 pandas 对数据框进行排序。保持柱子完好无损

    如下图所示 我想按以下方式对聊天进行排序Type按字母顺序排列 不过 我不想打乱顺序 Date User id 每个内Chat name 鉴于我的输入数据框位于左侧 我应该如何执行此操作 在Python中使用Pandas 您想使用对值进行排
  • AVPlayerLayer 显示黑屏但声音正常

    我正在尝试在中显示本地录制的视频AVP播放器层哪个有效有时 我可以听到录制视频中的音频 但看不到视频 有时视频和音频都可以工作 有时只有音频 我都尝试过AVP播放器层 and AVPlayerViewController但这两种情况都会出现
  • 对没有默认构造函数的控件使用 XamlReader

    我有一些 Xaml 对象的字符串表示形式 并且我想构建控件 我正在使用XamlReader Parse函数来执行此操作 对于像 Button 这样的简单控件 它有一个不带任何参数的默认构造函数 这样可以很好地工作 var buttonStr
  • 1.7+ 中的 jQuery live() 与 on()

    我知道从 jQuery 1 7 开始 live 方法已被弃用 所以这就是我想出的 document body on click list function console log this 这几乎可以达到目的并且相当于 list live
  • 如何将 JSON 数组值传递到 Jasper Reports 子报表中?

    Jasper 报告和子表有问题 我正在使用以下 JSON 格式 dataObjects objectId 025b3873ebe640aa9d6a34f9306548ae employeeFullName John Smith employ