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

使用Groovy JSONSlurper将JSON对象格式化为数组的技术问询

Groovy JSON转换问题:对象转指定结构数组

我是Groovy新手,在这个问题上耗了不少时间,希望能得到帮助或指引。

输入JSON

{
    "rates": {
        "USD": 3.39,
        "EUR": 1.00,
        "CAD": 1.31
    }
}

预期输出

需要将rates对象中的每个键值对转换为包含固定From_Curr(值为GBP)的数组,输出示例如下:

{
    "rates": [{
            "From_Curr": "GBP",
            "To_Curr": "USD",
            "Rate": 3.397
        }, {
            "From_Curr": "GBP",
            "To_Curr": "EUR",
            "Rate": 1.00
        }, {
            "From_Curr": "GBP",
            "To_Curr": "CAD",
            "Rate": 1.31
        }
    ]
}

我尝试的代码(未得到预期结果)

def collectedRates = new JsonSlurper()
    .parseText(inputJson)
    .rates
    .collectEntries{["From_Curr":"GBP","To_Curr":it.key,"Rate":it.value]};

解决方案

你的问题出在使用了collectEntries方法——这个方法是用来生成Map的,但我们需要的是数组(对应Groovy中的List)。改用collect方法遍历键值对,生成包含目标结构的List,再包装成输出的JSON结构即可。

正确代码

import groovy.json.JsonSlurper
import groovy.json.JsonBuilder

def inputJson = '''{
    "rates": {
        "USD": 3.39,
        "EUR": 1.00,
        "CAD": 1.31
    }
}'''

// 解析输入JSON
def parsedData = new JsonSlurper().parseText(inputJson)

// 转换rates对象为目标数组结构
def convertedRatesList = parsedData.rates.collect { currCode, rateValue ->
    [From_Curr: "GBP", To_Curr: currCode, Rate: rateValue]
}

// 构建最终输出的JSON结构
def outputJsonData = [rates: convertedRatesList]

// 输出格式化后的JSON字符串
println new JsonBuilder(outputJsonData).toPrettyString()

代码说明

  1. collect方法遍历rates的每个键值对,返回一个List,每个元素都是包含From_Curr、To_Curr、Rate的Map
  2. 将生成的List放入rates键下,构建出符合预期的JSON结构
  3. 使用JsonBuilder将结果转换为格式化的JSON字符串输出

内容的提问来源于stack exchange,提问作者dawgPdx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:39:22