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

Groovy 4.0.18用JsonBuilder转换SQL结果集为JSON时的冗余数据问题

Groovy 4.0.18 JsonBuilder 多余根节点数据问题解决

问题原因

你遇到的根节点多出结果集数据的问题,通常是因为初始化JsonBuilder时直接传入了结果集列表,导致它默认将该列表作为根节点的顶级内容,之后在闭包里构建queryResults节点时又重复添加了一次数据,最终出现重复内容。另一种可能是构建resultSets列表时意外混入了额外的无效数据。

解决方案

正确构建JSON结构

初始化JsonBuilder时不要传入任何参数,而是在闭包内明确构建queryResults节点,并将结果集列表转换为键值对数组:

// 假设已有的变量:
// List<ResultSet> resultSets - SQL查询结果集列表
// List<String> columnNames - 列名字符串列表

def jsonBuilder = new JsonBuilder()

// 构建目标JSON结构
jsonBuilder {
    queryResults resultSets.collect { rs ->
        def rowMap = [:]
        columnNames.each { column ->
            // 根据实际字段类型选择对应的get方法,比如getInt、getDate等
            rowMap[column] = rs.getObject(column)
        }
        rowMap
    }
}

// 获取最终JSON字符串
def finalJson = jsonBuilder.toPrettyString()

验证结果集列表有效性

如果问题仍存在,检查resultSets列表是否包含重复或空的ResultSet对象,确保它仅包含实际查询返回的有效行数据。比如在构建resultSets时,确认是通过正确遍历ResultSet并收集每一行数据,而非直接将整个ResultSet对象加入列表(这会导致后续处理时重复读取)。

错误写法示例(对比参考)

以下是容易导致多余数据的错误写法,注意避免:

// 错误:初始化时传入resultSets,导致根节点默认添加该列表
def jsonBuilder = new JsonBuilder(resultSets)
jsonBuilder {
    queryResults resultSets.collect { ... }
}
// 生成的JSON会同时包含根节点的resultSets数组和queryResults节点

内容的提问来源于stack exchange,提问作者H. Dog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:41:10