Jasper Reports表格中如何全局引用非子数据集路径的JSON字段?
解决Jasper Reports子数据集引用全局JSON字段的问题
方法1:使用JSON绝对路径直接引用
子数据集的查询result.details会将解析上下文锁定在details数组的单条数据上,直接写result.cantonal.cantonalTax.totalTax会因上下文不匹配返回null。Jasper的JSON数据源支持用$表示根节点,通过绝对路径即可绕过子数据集的上下文限制,修改字段配置如下:
<field name="totalTax" class="java.lang.String"> <fieldDescription><![CDATA[$.result.cantonal.cantonalTax.totalTax]]></fieldDescription> </field>
注意:无需保留自定义的result.Description属性,Jasper的JSON数据源仅识别fieldDescription中的路径配置,直接使用$开头的绝对路径即可访问全局JSON结构。
方法2:通过参数传递全局字段值
如果绝对路径方式不生效,可通过主数据集传递参数的方式实现:
- 在主数据集中定义对应全局字段:
<field name="mainTotalTax" class="java.lang.String"> <fieldDescription><![CDATA[result.cantonal.cantonalTax.totalTax]]></fieldDescription> </field>
- 在Table组件的
datasetRun配置中,将主数据集的字段值作为参数传入子数据集:
<datasetRun subDataset="Dataset1"> <datasetParameter name="PARAM_TOTAL_TAX"> <datasetParameterExpression><![CDATA[$F{mainTotalTax}]]></datasetParameterExpression> </datasetParameter> <!-- 保留原有数据源配置 --> </datasetRun>
- 在子数据集
Dataset1中定义对应参数:
<parameter name="PARAM_TOTAL_TAX" class="java.lang.String"/>
- 在Table的文本组件中直接引用该参数:
$P{PARAM_TOTAL_TAX}
核心说明
子数据集的JSON查询会将解析上下文限定在result.details数组内,默认字段路径均为相对该上下文的路径,必须通过$前缀的绝对路径,或参数传递的方式,才能访问根节点下的其他全局JSON结构。
内容的提问来源于stack exchange,提问作者Cjxcz Odjcayrwl
相关产品推荐
相关产品推荐

