使用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()
代码说明
collect方法遍历rates的每个键值对,返回一个List,每个元素都是包含From_Curr、To_Curr、Rate的Map- 将生成的List放入
rates键下,构建出符合预期的JSON结构 - 使用
JsonBuilder将结果转换为格式化的JSON字符串输出
内容的提问来源于stack exchange,提问作者dawgPdx
相关产品推荐
相关产品推荐

