如何让Jasper reports 6.5.1填充json表

如何让Jasper reports 6.5.1填充json表,json,jasper-reports,Json,Jasper Reports,这与前面的问题相似,但它让我感到困惑。我使用的是Studio 6.5.1 CE版本。因此,我在一个启动的文件中有json数据 { "users": { "itemCount": 30, "items": [{ "id": 1, "username": "user1", ... 我的主json查询为空,只定义了一个字段:itemCount,表达式为“users.itemCount” 我有一个详细信息栏表和带有

这与前面的问题相似,但它让我感到困惑。我使用的是Studio 6.5.1 CE版本。因此,我在一个启动的文件中有json数据

{
    "users": {
        "itemCount": 30,
        "items": [{
            "id": 1,
            "username": "user1",
...
我的主json查询为空,只定义了一个字段:itemCount,表达式为“users.itemCount”

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

运行报告时,我确实看到填充了single 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>

您的子数据集应该没有查询,如下所示:

<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_连接转换为JsonDataSource):



尝试将“UserDataset”保留为no/空查询。您的子数据源表达式已在那里导航。找不到任何有效的查询导航和表达式组合。是!这就是答案。我还发现,这里真正的解决方法是使用“users.items”查询获得正确的数据源表达式。子数据集可以具有相同的查询,以便从json数据源读取和定义字段。这还提供了将字段定义为json结构中的相对查询的简单功能,因为我有一个带有表达式“userProfile.fullName”的“fullName”字段,其中绝对路径是users.items.userProfile.fullName。我认为子数据集查询之所以有效,是因为Studio在那里注入了适配器。在Studio之外,它不应该工作。我很难让服务器支持数据适配器。最后,我将其添加到jrxml文件中:其中ds_JsonUsers是从Studio上载的适配器。但是,REST_V2接口调用运行报告错误时会出现一个“一般错误”,并且没有任何文本。这与我定义适配器的方法有关吗?
<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>