Groovy中如何使用动态变量作为JSON属性名?
Groovy动态Map键名实现方案
要把变量值作为Map(对应JSON属性名)的键,Groovy有两种常用写法:
方法一:括号包裹变量的字面量写法
在Map字面量里,用[(变量名)]的格式定义动态键,Groovy会自动解析变量的实际值作为键名。修改后的完整代码如下:
String attr = ff.getAttribute("unique_dim"); def result = report.data.rows.collectMany{ [headers, it.metrics[0].values].transpose().collect{ h, v -> [ metric_name: h.name, metric_value: v, report_date: it.dimensions[0], (attr): it.dimensions[1] // 用括号包裹变量,实现动态键名 ] } }
方法二:先创建Map再动态添加键
如果需要额外逻辑处理,或后续要修改Map结构,可以先初始化固定键值对,再用put()方法添加动态键:
String attr = ff.getAttribute("unique_dim"); def result = report.data.rows.collectMany{ [headers, it.metrics[0].values].transpose().collect{ h, v -> def itemMap = [ metric_name: h.name, metric_value: v, report_date: it.dimensions[0] ] itemMap.put(attr, it.dimensions[1]) // 动态注入键值对 return itemMap } }
两种方式都能满足需求,第一种简洁直观,适合直接在字面量中定义动态键;第二种灵活性更强,适配复杂逻辑场景。
内容的提问来源于stack exchange,提问作者fujidaon
相关产品推荐
相关产品推荐

