Groovy如何实现非固定字段JSON结构的动态格式化转换
Groovy实现指定JSON结构转换方案
直接使用Groovy自带的JSON处理工具即可实现无感知适配任意字段名、字段数量的转换需求,示例代码如下:
import groovy.json.JsonSlurper import groovy.json.JsonOutput // 输入的原始JSON字符串 def rawJson = ''' { "Fields":[ "FieldName1", "FieldName2", "FieldName3", "FieldName4", "FieldName5" ], "Rows":[ { "Values":[ "A", "B", "C", "D", "E" ] }, { "Values":[ "F", "G", "H", "I", "J" ] }, { "Values":[ "K", "L", "M", "N", "O" ] } ] } ''' // 解析原始JSON def jsonData = new JsonSlurper().parseText(rawJson) // 核心转换逻辑:遍历所有行,将字段名和对应值拼接为Map def result = [ values: jsonData.Rows.collect { row -> // 按索引配对字段名和值,自动适配任意数量、任意名称的字段 [jsonData.Fields, row.Values].transpose().collectEntries() } ] // 若需和示例输出一致仅保留前4个字段,可修改为以下逻辑 // def result = [ // values: jsonData.Rows.collect { row -> // [jsonData.Fields.take(4), row.Values.take(4)].transpose().collectEntries() // } // ] // 输出格式化后的结果 println JsonOutput.prettyPrint(JsonOutput.toJson(result))
逻辑说明
- 转换逻辑完全不依赖固定字段名、固定字段数量:通过
transpose()方法将字段名数组和行值数组按索引一一配对,collectEntries()直接将配对后的二维数组转为键值对Map,只要每行的Values数组长度和Fields数组长度一致,即可正常转换。 - 如需调整输出字段的筛选规则,仅需要在配对前对
jsonData.Fields做截取/过滤处理即可,不需要修改核心转换逻辑。
内容的提问来源于stack exchange,提问作者Stephen Bentley
相关产品推荐
相关产品推荐

