You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JasperReports JSON元数据导出器生成嵌套对象数组

错误原因

JasperReports的Json元数据导出器是完全跟着报表模板的元素层级映射JSON结构的,不是光靠schema和字段路径就能自动推断嵌套边界。你之前的配置只给字段加了person.前缀的路径,没在模板里给person这个嵌套对象绑定对应的容器元素,导出器处理第一条数据的时候会临时创建一次person对象装字段,后面两条数据找不到和person层级绑定的元素锚点,就直接把字段平铺到外层对象上,才会出现只有第一条数据在person节点下、剩下的都堆在外层的畸形结果。
扁平结构能正常导出,是因为数组下的直接子对象刚好和Detail带区本身的默认层级匹配,不需要额外加容器做锚点。

正确配置方法

  1. 打开报表的Detail带区,拖入一个Frame容器,把原来放firstName、lastName的两个文本字段全部挪到这个Frame内部。
  2. 选中这个Frame,给它添加JSON路径属性:
    <property name="net.sf.jasperreports.export.json.path" value="person"/>
    
  3. 之前写的嵌套结构schema、两个文本字段上的person.firstName/person.lastName路径属性都不用调整,直接执行导出即可。

配置完成后就能得到符合预期的输出结果:

[
    {
        "person": {
            "firstName": "john",
            "lastName": "carter"
        }
    },
    {
        "person": {
            "firstName": "mary",
            "lastName": "ann"
        }
    },
    {
        "person": {
            "firstName": "jack",
            "lastName": "thomas"
        }
    }
]

补充规则:后续如果要实现更复杂的多层嵌套、嵌套数组结构,每一层JSON对象/数组都要在模板里对应一个容器(Frame对应普通对象,列表组件/子报表对应数组),给容器配置对应层级的JSON路径,再把内层字段/子容器放到对应父容器内部,导出器才能正确识别层级边界,不会出现结构错乱。

内容的提问来源于stack exchange,提问作者Gustavo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:01:06