在 Jasper 报表上的表中显示 JSON 数组

2024-03-31

我正在尝试使用由 JAVA 函数传递的 JSONDatasource 创建 JasperReport。

这是我发送给 jasper 的 JSON

{
  "Person": {
    "FirstName": "John",
    "LastName": "Smith",
    "Contacts": [
        {
            "Type": "Cell",
            "Number": "555-555-5555"
        },
        {
            "Type": "Home",
            "Number": "666-666-6666"
        }
    ]
  }
}

我正在尝试在表格中显示电话号码。我可以很好地显示其他字段。但不知道如何显示该表。

这是我定义 Jasper 字段的方式

<field name="FirstName" class="java.lang.String">
        <property name="net.sf.jasperreports.json.field.expression" value="Person.FirstName"/>
    </field>
    <field name="LastName" class="java.lang.String">
        <<property name="net.sf.jasperreports.json.field.expression" value="Person.LastName"/>
    </field>
    <field name="Contacts" class="java.lang.String">
        <property name="net.sf.jasperreports.json.field.expression" value="Person.Contacts"/>
</field>

随着JSON语言,您只能通过以下方式访问联系人嵌套数组subDataset,您可以用它填充 Table 组件。这是一个完整的示例(我已删除生成的样式以保持示例紧凑):

<?xml version="1.0" encoding="UTF-8"?>
<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="81afe112-ee1b-4443-8d1c-cb6d9ab95dd8">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="stackoverflow/JSON_array_table/DataAdapter.xml"/>
    <subDataset name="ContactsSubdataset" uuid="4563e834-a9e5-43b5-9f0a-824948c73c73">
        <field name="Type" class="java.lang.String">
            <property name="net.sf.jasperreports.json.field.expression" value="Type"/>
        </field>
        <field name="Number" class="java.lang.String">
            <property name="net.sf.jasperreports.json.field.expression" value="Number"/>
        </field>
    </subDataset>
    <queryString language="json">
        <![CDATA[]]>
    </queryString>
    <field name="FirstName" class="java.lang.String">
        <property name="net.sf.jasperreports.json.field.expression" value="Person.FirstName"/>
    </field>
    <field name="LastName" class="java.lang.String">
        <property name="net.sf.jasperreports.json.field.expression" value="Person.LastName"/>
    </field>
    <detail>
        <band height="300" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="80" height="30" uuid="d59811d6-a4e9-4871-a64b-f332d049e551"/>
                <text><![CDATA[First Name:]]></text>
            </staticText>
            <staticText>
                <reportElement x="0" y="30" width="80" height="30" uuid="ef25edff-1c33-4ec4-8dd1-21766039e6e3"/>
                <text><![CDATA[Last Name:]]></text>
            </staticText>
            <staticText>
                <reportElement x="0" y="60" width="80" height="30" uuid="e74bfa48-5040-4655-b419-f4f8e9f7e871"/>
                <text><![CDATA[Contacts:]]></text>
            </staticText>
            <textField>
                <reportElement x="80" y="0" width="200" height="30" uuid="49d1558c-396f-4864-b71f-41b6c7d677c2"/>
                <textFieldExpression><![CDATA[$F{FirstName}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="80" y="30" width="200" height="30" uuid="8ddaca45-a124-4c67-b2a8-50f7188097f9"/>
                <textFieldExpression><![CDATA[$F{LastName}]]></textFieldExpression>
            </textField>
            <componentElement>
                <reportElement x="80" y="60" width="200" height="60" uuid="105c3994-b8a8-4085-81ef-4a0e55efc7c6"/>
                <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
                    <datasetRun subDataset="ContactsSubdataset" uuid="5459bdfb-6835-4007-8e56-566716c8c29c">
                        <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("Person.Contacts")]]></dataSourceExpression>
                    </datasetRun>
                    <jr:column width="100" uuid="b3d4c078-f65a-4213-9644-83b85b425703">
                        <jr:columnHeader height="30">
                            <staticText>
                                <reportElement x="0" y="0" width="100" height="30" uuid="4b972b67-2f1a-4843-857e-c735dfc59c82"/>
                                <text><![CDATA[Type]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell height="30">
                            <textField>
                                <reportElement x="0" y="0" width="100" height="30" uuid="e618a748-3273-476d-95c5-4d232260bf0a"/>
                                <textFieldExpression><![CDATA[$F{Type}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                    <jr:column width="100" uuid="5b01cf7c-71bc-474a-9858-ef58479efcdc">
                        <jr:columnHeader height="30">
                            <staticText>
                                <reportElement x="0" y="0" width="100" height="30" uuid="394f2626-8c49-491d-a09c-ef7f90132741"/>
                                <text><![CDATA[Number]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell height="30">
                            <textField>
                                <reportElement x="0" y="0" width="100" height="30" uuid="40ddb342-5be4-43bf-9fb2-a1fda76f53af"/>
                                <textFieldExpression><![CDATA[$F{Number}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                </jr:table>
            </componentElement>
        </band>
    </detail>
</jasperReport>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Jasper 报表上的表中显示 JSON 数组 的相关文章

  • 如何使用 SLF4J 和 Log4j2 记录 FATAL(或任何自定义日志级别)

    我有那些具体的要求 需要能够登录FATAL level 需要使用SLF4J 需要使用Log4j2 现在 这是我的执行 final Logger logger LoggerFactory getLogger HelloWorld class
  • Hibernate OneToMany 关系是 PersistentBag 而不是 List

    我正在 javafx 中开发一个应用程序 它通过 RMI 与 EAR 连接 该 EAR 连接到 SQLServer DB 并使用 hibernate 映射 POJOS 这些 POJOS 包含双向 OneToMany 和 ManyToOne
  • .java 和 .scala 类之间是否可能存在循环依赖?

    假设我在 java 文件中定义了类 A 在 scala 文件中定义了类 B A 类使用 B 类 B 类使用 A 类 如果我使用 java 编译器 则会出现编译错误 因为 B 类尚未编译 如果我使用scala编译器A类将找不到 有没有可以同时
  • 使用 jquery 迭代 json 数组

    已经有一些帖子和我遇到了类似的问题 如何使用 PHP 中的 jQuery AJAX 调用迭代 JSON 数组 https stackoverflow com questions 6472338 how do i iterate over a
  • 有效地查找正则表达式的所有重叠匹配项

    这是后续与 java 正则表达式匹配的所有重叠子字符串 https stackoverflow com q 11303309 244526 有没有办法让这段代码更快 public static void allMatches String
  • 使用 jdbc 程序连接到 Open Office odb 文件

    我编写了以下代码来连接到 OpenOffice db String db C Documents and Settings hkonakanchi Desktop Test odb Class forName org hsqldb jdbc
  • java“void”和“非void”构造函数

    我用 java 编写了这个简单的类 只是为了测试它的一些功能 public class class1 public static Integer value 0 public class1 da public int da class1 v
  • 方法不必要地被调用?

    我有一个 BaseActivity 它可以通过其他所有活动进行扩展 问题是 每当用户离开 暂停 活动时 我都会将音乐静音 我也不再接听电话 问题是 onPause每当用户在活动之间切换时就会被调用 这意味着应用程序不必要地静音和停止tele
  • 业务代表与服务定位器

    Business Delegate 和 Service Locator 之间有什么区别 两者都负责封装查找和创建机制 如果 Business Delegate 使用 Service Locator 来隐藏查找和创建机制 那么 Busines
  • Java 的 QP 求解器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JSP 标签+ scriptlet。如何启用脚本?

    我有一个使用标签模板的页面 我的 web xml 非常基本 我只是想在页面中运行一些代码 不 我对标签或其他替代品不感兴趣 我想使用不好的做法 scriptlet 哈哈 到目前为止 我收到了 HTTP ERROR 500 错误 Script
  • 您能让 Tomcat 6 stdout.log 文件表现得像 log4j DailyRollingFileAppender 吗?

    我们使用的是 Tomcat 6 的 Windows 安装 默认情况下 我们应用程序的 log4j 输出将转到 catalina base logs stdout log 文件 该日志文件仅在我们重新启动 Tomcat 时滚动 并且文件名始终
  • 如何自定义JProgressBar?

    我正在制作一个启动器 我想要一个自定义的进度栏 我已经做了一些研究 并且可以使用 JavaFX 从未用它做过任何事情 并且可以通过替换 UI 来实现 我正在寻找一个具有圆形边缘和圆形填充的酒吧 像这样的事情 package gui impo
  • Java String.format 向整数添加空格

    我有一小段代码 我不明白输出 此输出向我的字符串格式文本添加空格 我做错了什么吗 public class HelloWorld public static void main String args int a1 540 int a2 4
  • Java中的DRY原则[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我一直在读关于DRY https en wikipedia org wiki Don 27t repeat yourself原则 虽然看起来
  • 存储过程将多个表返回到 spring jdbc 模板

    我正在使用 JdbcTemplate 从 Spring DAO 类调用存储过程 我的问题是 存储过程返回多个表 有没有办法使用 Spring JdbcTemplate 访问多个表 如果我使用jdbcTemplate queryForList
  • 您可以使用 JSONP 检索您的 Skype 状态吗?

    有谁知道使用 JSONP 获取 Skype 状态的 URL 到目前为止我只找到了一个 XML 状态 URL http mystatus skype com username xml 我正在尝试使用 AJAX 查询 Skype 是的 我可以使
  • Java SE + Spring Data + Hibernate

    我正在尝试使用 Spring Data Hibernate 启动 Java SE 应用程序 并且到目前为止已经完成了以下操作 配置文件 Configuration PropertySource classpath hibernate pro
  • Java的hashCode可以为不同的字符串产生相同的值吗?

    使用java的哈希码函数是否可以为不同的字符串提供相同的哈希码 或者如果可能的话 其可能性的 是多少 Java 哈希码是 32 位 它散列的可能字符串的数量是无限的 所以是的 会发生冲突 百分比是没有意义的 项目 字符串 的数量是无限的 而
  • 如何在Java中跨类共享变量,我尝试了静态不起作用

    类 Testclass1 有一个变量 有一些执行会改变变量的值 现在在同一个包中有类 Testclass2 我将如何访问 Testclass2 中变量的更新值 由 Testclass1 更新 试过这个没用 注意 Testclass1和Tes

随机推荐