Jasper Report - 将 json IO 流传递给子报表

Jasper Report - Passing json IO stream to subreport

我有一个包含子报表的工作报表,它使用 json 源文件作为数据源。在这个子报告中,我将路径发送到 subReportParameter net.sf.jasperreports.json.source

中的 json 文件

但是,如果我使用 JSON IO 流作为数据源而不是 json 源文件,我该如何将数据源传递给子报表?对于单个报告,JSON iostream 运行良好但无法弄清楚如何在此处使用子报告。

要使用 InputStream 中的 json,我将使用 url 进行示例,因为这似乎是最有可能的采用。

java代码生成JsonDataSource

InputStream iostream = new URL("http://www.w3schools.com/website/Customers_MYSQL.php").openStream(); //Natrually this code is not need if you already have the iostrem
JsonDataSource dsSupReeport = new JsonDataSource(iostream);;

如何将其作为参数传递(让我们在一个 2 个示例中做 ),传递整个 JsonDataSource 或仅传递 String 的值URL

在 java 中设置您要传递给报告的 parameters (fillManager)

Map<String,Object> paramMap = new HashMap<String,Object>();
paramMap.put("datasource", new JsonDataSource(new URL("http://www.w3schools.com/website/Customers_MYSQL.php").openStream()));
paramMap.put("urlToDataSource", "http://www.w3schools.com/website/Customers_MYSQL.php");

在报告中设置正确的参数class

<parameter name="datasource" class="net.sf.jasperreports.engine.data.JsonDataSource" isForPrompting="false"/>
<parameter name="urlToDataSource" class="java.lang.String" isForPrompting="false"/>

然后使用它们 dataSourceExpression 使用 JsonDataSource 是:

<dataSourceExpression><![CDATA[$P{datasource}]]></dataSourceExpression>

或使用 url

String
<dataSourceExpression><![CDATA[new JsonDataSource(new URL($P{urlToDataSource}).openStream())]]></dataSourceExpression>

注意:如果您的数据已经存在于主数据源中(不需要新的 JsonDataSource),您可以使用子数据集。