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

Groovy解析JSON后List输出无引号问题求助(环境:Groovy2.4.16等)

问题分析

你遇到的情况其实是Groovy中String和List默认toString()行为的正常表现。当你直接打印String对象时,它只会输出字符串的内容本身,不会自动添加引号;而List的toString()方法是遍历所有元素并调用它们的toString(),所以整个List的输出也不会包含引号。你看到的示例里带引号的输出,大概率是JSON格式的序列化结果,而不是直接打印List对象的结果。

解决方案

根据你的需求(保持List类型,同时输出/使用带引号的元素),分两种场景处理:

场景1:只是打印输出时需要带引号

如果你只是希望在日志中看到带引号的格式,但List本身的元素还是原始的字符串值,可以用JsonOutput工具类把List序列化为JSON字符串,这样输出就会包含引号,同时原List的类型和内容不受影响:

import groovy.json.JsonOutput

def sout = new StringBuilder('{"vms":["Jenkins","UbuntuRunner"]}')
def serr = new StringBuilder()
def soutJson = new groovy.json.JsonSlurper().parseText(sout.toString())
def List myList = soutJson.vms

// 用JsonOutput生成带引号的JSON格式字符串
log.append("soutJson: " + JsonOutput.toJson(soutJson) + "\n")
log.append("myList: " + JsonOutput.toJson(myList) + "\n")
log.append("myList[0]: " + JsonOutput.toJson(myList[0]) + "\n")
log.append("myList[1]: " + JsonOutput.toJson(myList[1]) + "\n")
log.append("myList.size(): " + myList.size() + "\n")

这样输出就会和你期望的一致:

soutJson: {"vms":["Jenkins","UbuntuRunner"]}
myList: ["Jenkins","UbuntuRunner"]
myList[0]: "Jenkins"
myList[1]: "UbuntuRunner"
myList.size(): 2

场景2:后续代码需要List中的元素本身就是带引号的字符串

如果你的后续逻辑需要List里的每个元素都是包含引号的字符串(比如元素值是"Jenkins"而不是Jenkins),可以在解析后对List进行转换,给每个元素添加引号:

def sout = new StringBuilder('{"vms":["Jenkins","UbuntuRunner"]}')
def serr = new StringBuilder()
def soutJson = new groovy.json.JsonSlurper().parseText(sout.toString())
// 给每个元素添加双引号
def List myList = soutJson.vms.collect { "\"$it\"" }

// 此时直接打印就会带引号
log.append("myList: " + myList + "\n")
log.append("myList[0]: " + myList[0] + "\n")
log.append("myList[1]: " + myList[1] + "\n")

输出结果:

myList: ["Jenkins", "UbuntuRunner"]
myList[0]: "Jenkins"
myList[1]: "UbuntuRunner"

这种方式下,List的类型依然是List<String>,只是每个元素的内容包含了引号。

关键说明
  • Groovy中直接打印String或List时,默认不会添加引号,这是正常的对象toString行为,不是解析JSON的问题。
  • 如果你需要JSON格式的输出,JsonOutput是最可靠的方式,它能保证输出符合JSON规范的带引号格式。
  • 如果需要修改List元素本身的内容,collect方法可以快速完成转换,同时保持List类型不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:37:43