Crafter中Groovy如何修改代码将Strategy类型字段输出为目标数组格式
解决方案
问题根因
你原有代码直接批量取players_o下所有子项的first_name_s/last_name_s字段,得到的是字段值的数组,直接赋值给元素文本会自动转为带[]的字符串格式,且无法生成嵌套结构。
修改方案
完全替换原有Line A、Line B的代码,改为遍历players_o的子项逐个构造嵌套结构,修改后完整代码如下:
private createStrategyElement(rootStrategy, ctx) { Element strategy = new DefaultElement("strategy") // 构造players外层数组节点 Element playersNode = new DefaultElement("players") // 构造item内层数组节点 Element itemListNode = new DefaultElement("item") // 非空判断后遍历所有player子项 if (rootStrategy.players_o?.item) { rootStrategy.players_o.item.each { singlePlayerItem -> def playerComp = singlePlayerItem.component // 构造单个player对象节点 Element singlePlayerNode = new DefaultElement("") singlePlayerNode.addElement("first_name_s").text = playerComp?.first_name_s ?: "" singlePlayerNode.addElement("last_name_s").text = playerComp?.last_name_s ?: "" itemListNode.add(singlePlayerNode) } } playersNode.add(itemListNode) strategy.add(playersNode) return strategy }
说明
- 代码中使用Groovy语法糖
?.安全取值、?:简化空值默认赋值,替换原有冗余的三元判断 - 遍历每个player子项单独构造对象节点,再统一塞入
item数组,序列化输出后即可匹配你需要的嵌套JSON结构
内容的提问来源于stack exchange,提问作者flash
相关产品推荐
相关产品推荐

