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

What's the proper way of adding a json subDataSource in Jasper Reports?

我有这个 json DS:

{  
   "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

的答案

但是没有用。 问题是目前 jackson core 在 repo "com.fasterxml.jackson.core"

而 iReport 一直要求 "org.codehaus.jackson.core"

尝试寻找 org.codehaus 下的旧版本 jackson 核心并将它们添加到 iReport 类路径,但它仍然不起作用。 有什么想法吗?

通常你不需要转换表达式。 尝试:<![CDATA[$P{REPORT_DATA_SOURCE}.subDataSource("workSiteRows")]]>

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