如何在Jasper pdf报告中测试json数组属性的大小

时间:2015-12-16 12:45:00

标签: json jasper-reports pdf-generation

我正在tibco jaspersoft工作室设计Pdf报告。该报告使用的是json数据源。 json文件中有一些子代:

{
    ...,
    "children":[],
    ...
} 

我正在使用子带内的子报告来渲染孩子(当他们在那里时)就好了。 children数组可能是空的(如上例所示),我想分配给包含的band,因此当子项为空时它将消失。

我试图声明字段:

<field name="children" class="java.lang.Object[]">
        <fieldDescription>
               <![CDATA[children]]>    
        </fieldDescription>
</field>

<printWhenExpression>   
     <![CDATA[$F{children}.length!=0]]>
</printWhenExpression>

但表达式编辑器一直抱怨消息

  

当前表达式无效。请验证它!

我还尝试了一些带有NOT(EQUALS())的相同结果的wariants。表达式编辑器将突出显示.length!= 0作为错误。

更新 表达式编辑器中显示的错误似乎不是真正的错误,报告将编译。如果数组为空,则条件有效。否则我得到另一个错误

  

net.sf.jasperreports.engine.JRException:无法获取JSON的值   类的字段“children”[Ljava.lang.Object;。

孩子是一些结构化的POJOS,确实是Object的实例。

到目前为止,我通过在json数据中添加一些额外的布尔标志来解决这个问题。我不喜欢这个解决方案,但它对我的客户来说已经足够了

2 个答案:

答案 0 :(得分:0)

评论中的

Alex K正在对此作出裁判:

如果您在language="java"标记上使用language="groovy"jasperReport,那么您的表达式将正常运行,我的猜测是您当前正在使用language="javascript"

有关表达式脚本语言的详细信息,请参阅JRCompiler API

要更改它,请编辑jrxml,设置正确的属性,或使用报告节点(基本节点)上的IDE属性。

答案 1 :(得分:0)

<printWhenExpression><![CDATA[!$F{children}.toString().equals( "[]" )]]></printWhenExpression>

此代码适用于我,