如何让Jasper报告6.5.1填充json表

时间:2018-02-20 19:19:06

标签: json jasper-reports

这与之前的问题类似,但令我难过。我使用的是Studio 6.5.1 CE版本。所以我在一个启动的文件中有json数据

{
    "users": {
        "itemCount": 30,
        "items": [{
            "id": 1,
            "username": "user1",
...

我的主json查询是空白的,定义了一个字段:itemCount with expression" users.itemCount"。

我有一个详细信息频段表和" UserDataset"使用jsonql查询" users.items"。有字段" id"表达" id","用户名"表达式"用户名"等。数据预览准确显示字段。

运行报告时,我确实看到填充了单个itemCount字段。问题是缺少表格。显然我无法成功地将数据源绑定到表中。我尝试了各种各样的表达方式,我认为这样的方法应该有效:

<datasetRun...>
    ...
    <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_CONNECTION}).subDataSource("users.items")]]></dataSourceExpression>
</datasetRun>

但是,我永远无法填充表格。我究竟做错了什么? (我有与jdbc源类似的报告格式,我对这些表没有任何问题。)

我无法找到任何有效的查询/表达式组合,因此我将jrxml文件附加了样式信息,以便查看。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 6.5.1  -->
<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="Users" pageWidth="792" pageHeight="612" orientation="Landscape" columnWidth="752" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isIgnorePagination="true" uuid="61928541-d006-4374-9164-985c6c4116c9">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="Users.json"/>
    <subDataset name="UserDataset" uuid="effd13cd-71de-4771-b706-d68b1042b564">
        <property name="com.jaspersoft.studio.data.defaultdataadapter" value="Users.json"/>
        <queryString language="jsonql">
            <![CDATA[users.items]]>
        </queryString>
        <field name="id" class="java.lang.Integer">
            <property name="net.sf.jasperreports.jsonql.field.expression" value="id"/>
            <fieldDescription><![CDATA[id]]></fieldDescription>
        </field>
        <field name="username" class="java.lang.String">
            <property name="net.sf.jasperreports.jsonql.field.expression" value="username"/>
            <fieldDescription><![CDATA[username]]></fieldDescription>
        </field>
    </subDataset>
    <queryString language="jsonql">
        <![CDATA[]]>
    </queryString>
    <field name="itemCount" class="java.lang.Integer">
        <property name="net.sf.jasperreports.jsonql.field.expression" value="users.itemCount"/>
        <fieldDescription><![CDATA[itemCount]]></fieldDescription>
    </field>
    <detail>
        <band height="116" splitType="Stretch">
            <componentElement>
                <reportElement x="-9" y="50" width="770" height="62" uuid="7d7f19b0-9800-43ab-86a4-45846dae7775">
                    <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
                    <property name="com.jaspersoft.studio.table.style.table_header" value="Table_TH"/>
                    <property name="com.jaspersoft.studio.table.style.column_header" value="Table_CH"/>
                    <property name="com.jaspersoft.studio.table.style.detail" value="Table_TD"/>
                </reportElement>
                <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="UserDataset" uuid="fdfe69e2-eeac-4287-9e41-4c39610a79be">
                        <datasetParameter name="JSON_INPUT_STREAM">
                            <datasetParameterExpression><![CDATA[$P{JSON_INPUT_STREAM}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="net.sf.jasperreports.json.source">
                            <datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.json.source}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="net.sf.jasperreports.json.sources">
                            <datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.json.sources}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="net.sf.jasperreports.json.date.pattern">
                            <datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.json.date.pattern}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="net.sf.jasperreports.json.number.pattern">
                            <datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.json.number.pattern}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="JSON_LOCALE">
                            <datasetParameterExpression><![CDATA[$P{JSON_LOCALE}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="net.sf.jasperreports.json.locale.code">
                            <datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.json.locale.code}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="JSON_TIME_ZONE">
                            <datasetParameterExpression><![CDATA[$P{JSON_TIME_ZONE}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="net.sf.jasperreports.json.timezone.id">
                            <datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.json.timezone.id}]]></datasetParameterExpression>
                        </datasetParameter>
                        <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_CONNECTION}).subDataSource("users.items")]]></dataSourceExpression>
                    </datasetRun>
                    <jr:column width="30" uuid="65fed6e9-ae42-4e04-b0b4-e2c8ef4a1b27">
                        <property name="com.jaspersoft.studio.components.table.model.column.name" value="Column1"/>
                        <jr:columnHeader style="Table_CH" height="30" rowSpan="1">
                            <staticText>
                                <reportElement x="0" y="0" width="30" height="30" uuid="becae13f-4af9-4884-9b38-ab19347e9455"/>
                                <text><![CDATA[USER_ID]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell style="Table_TD" height="30">
                            <textField>
                                <reportElement x="0" y="0" width="30" height="30" uuid="8c6b26dc-c436-4e68-acd5-89c33e09dac6"/>
                                <textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                    <jr:column width="90" uuid="224b44e6-a9c2-4407-891d-623c7d6b33dc">
                        <property name="com.jaspersoft.studio.components.table.model.column.name" value="Column2"/>
                        <jr:columnHeader style="Table_CH" height="30" rowSpan="1">
                            <staticText>
                                <reportElement x="0" y="0" width="90" height="30" uuid="3c961dd1-f991-4cde-9d22-224d4f3ae86c"/>
                                <text><![CDATA[USERNAME]]></text>
                            </staticText>
                        </jr:columnHeader>
                        <jr:detailCell style="Table_TD" height="30">
                            <textField>
                                <reportElement x="0" y="0" width="90" height="30" uuid="3acbeee1-e7a4-4f45-b54c-b10c69bf7a95"/>
                                <textFieldExpression><![CDATA[$F{username}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                </jr:table>
            </componentElement>
            <textField>
                <reportElement x="0" y="10" width="100" height="30" uuid="683b48a8-3f4d-4a3a-9ab5-df8255699b8b"/>
                <textFieldExpression><![CDATA[$F{itemCount}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
    <pageFooter>
        <band height="39" splitType="Stretch">
            <textField>
                <reportElement x="326" y="6" width="100" height="30" uuid="94b2cbaa-c1f0-4934-a304-a0c4c84486a0"/>
                <textFieldExpression><![CDATA["Page" +$V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>
        </band>
    </pageFooter>
</jasperReport>

1 个答案:

答案 0 :(得分:0)

您的subDataset应该没有查询,如下所示:

<subDataset name="UserDataset" uuid="effd13cd-71de-4771-b706-d68b1042b564">
    <field name="id" class="java.lang.Integer">
        <property name="net.sf.jasperreports.jsonql.field.expression" value="id"/>
        <fieldDescription><![CDATA[id]]></fieldDescription>
    </field>
    <field name="username" class="java.lang.String">
        <property name="net.sf.jasperreports.jsonql.field.expression" value="username"/>
        <fieldDescription><![CDATA[username]]></fieldDescription>
    </field>
</subDataset>

你的表的datasetRun应该只使用正确的表达式,就像这样,没有别的东西(你把REPORT_CONNECTION转换为JsonDataSource):

<datasetRun subDataset="UserDataset" uuid="fdfe69e2-eeac-4287-9e41-4c39610a79be">
    <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("users.items")]]></dataSourceExpression>
</datasetRun>