在Jasper Reports中添加json subDataSource的正确方法是什么?

问题描述:

我有这样的json DS:在Jasper Reports中添加json subDataSource的正确方法是什么?

{ 
    "customername":"home", 
    "workSiteRows":[ 
     { 
     "invoiceRows":[ 
      { 
       "candidateName":"name1", 
       "units":"13:00" 
      }, 
      { 
       "candidateName":"name2", 
       "units":"18:30" 
      } 
     ], 
     "workSiteName":"wsname1" 
     }, 
     { 
     "invoiceRows":[ 
      { 
       "candidateName":"name1", 
       "units":"13:00" 
      }, 
      { 
       "candidateName":"name2", 
       "units":"18:30" 
      } 
     ], 
     "workSiteName":"wsname2" 
     } 
    ] 
} 

在我的.jrxml文件,我已经定义了一个报表,我试图创建一个subDataSource传递给该报表。

<subreport isUsingCache="false"> 
    <reportElement x="0" y="10" width="555" height="30" uuid="b2d96c34-ad5d-4eb2-b218-43aad4e09282" /> 
    <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).dataSource("workSiteRows")]]></dataSourceExpression> 
    <subreportExpression><![CDATA[$P{REPORT_DIR} + "\\invoice_ws_row.jasper"]]></subreportExpression> 
</subreport> 

我不断收到以下异常: 错误填写打印...

java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonNode java.lang.ClassNotFoundException: org.codehaus.jackson.JsonNode 

我尝试使用回答问题http://community.jaspersoft.com/questions/956036/caused-javalangclassnotfoundexception-orgcodehausjacksonjsonnode-exception-ireport

但它不工作。 问题是,目前杰克逊核心是根据回购"com.fasterxml.jackson.core"

而iReport不断要求"org.codehaus.jackson.core"

尝试寻找位于org.codehaus下的老版本的jackson核心,并将它们添加到iReport类路径中,但它仍然无效。 任何想法?

通常情况下,您不需要投射表情。 尝试:<![CDATA[$P{REPORT_DATA_SOURCE}.subDataSource("workSiteRows")]]>

这对我的情况很好。 在你的情况下,subDataSource是一个数组,也许你也可以尝试使用一个对象。

+0

它的工作原理。谢谢。 *** facepalm ***,顺便说一句,你有没有使用Jasper Reports的其他选择? – ionutab

+1

不客气。我只知道贾斯珀报告,它的免费和最好的解决方案,但仍然有很多facepalm时刻使用它:) – hering

+0

我正在使用JasperSoft Studio 6.2.1,并且不可能使用'subDataSource'方法而无需投射到'net.sf.jasperreports.engine.data.JsonDataSource' –