我的报告使用jaspersoft studio 6.6.0,我的报告使用json作为数据源,在我的报告中有一个字段根据当前端口的条件显示下一个端口名称,但我无法显示,我的json是这样的
"routingLocs": [
{
"callOrder": 1,
"locCode": "ZWTHJ",
"isCurrentLoc": "N"
},
{
"callOrder": 2,
"locCode": "TRYAR",
"isCurrentLoc": "Y"
},
{
"callOrder": 3,
"locCode": "AUABP",
"isCurrentLoc": "N"
},
{
"callOrder": 4,
"locCode": "RAJPI",
"isCurrentLoc": "N"
}
]
现在,我必须显示对象的locCode,该对象紧挨着isCurrentLoc =“Y”的对象,为此,我创建了一个字段,表达式为<![CDATA[routingLocs..locCode(^.isCurrentLoc == "Y")]]>
此表达式将打印“TRYAR”而不是“AUABP”
我在JRXML中用于显示值的字段定义为
<field name="nextPort" class="java.lang.String">
<property name="net.sf.jasperreports.jsonql.field.expression">
<![CDATA[routingLocs..locCode(^.isCurrentLoc == "Y")]]>
</property>
<fieldDescription><![CDATA[nextPort]]></fieldDescription>
</field>
请帮我修正这个表达式
提前感谢您的任何支持
1条答案
按热度按时间cnwbcb6i1#
使用
jsonql
查询无法访问同级元素,但可以在单独的subDataset
中过滤JSON以达到所需的效果。如果JSON数据中存在某种顺序,例如callOrder
的升序,则可以使用过滤查询开始创建主数据集,如下所示:然后创建一个接受
MAIN_CALL_ORDER
参数的subDataset,它将使用与main相同的JSON数据:在这里,查询将生成
callOrder
大于主数据集发送的callOrder
的第一个项目,然后这个数据集应该链接到一个列表,该列表将被传递参数,如下所示:一个基本的工作JRXML如下所示:
并产生以下输出:
此示例需要使用此属性链接到主数据集和子数据集的基于文件的数据适配器:
如果没有基于文件的数据适配器,可以创建一个,并从Jaspersoft Studio内的Repository Explorer将其导出到文件。