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
相关产品推荐
相关产品推荐

