【发布时间】:2020-09-18 23:24:06
【问题描述】:
(Groovy 版本:2.4.16 JVM:11.0.8 供应商:Debian OS:Linux)
我的 bash shell 脚本输出一个如下所示的 JSON 字符串(没有“sout:”):
sout: {"vms":["Jenkins","UbuntuRunner"]}
我将其用作此 Groovy 代码的输入:
def sout = new StringBuilder()
def serr = new StringBuilder()
// translate JSON to List
def soutJson = new JsonSlurper().parseText(sout.toString())
log.append("sout: " + sout + "\n")
log.append("serr: " + serr + "\n")
log.append("soutJson: " + soutJson + "\n")
def List myList = soutJson.vms
log.append("myList: " + myList + "\n")
log.append("myList[0]: " + myList[0] + "\n")
log.append("myList[1]: " + 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
但是 实际上 输出缺少引号:
soutJson: [vms:[Jenkins, UbuntuRunner]]
myList: [Jenkins, UbuntuRunner]
myList[0]: Jenkins
myList[1]: UbuntuRunner
myList.size(): 2
我发现的每个打印列表或列表元素的示例都包含引号。我不在乎这些是单引号还是双引号,但是如果没有引号,以后将 myList 作为输入的代码将不起作用。而且不能是字符串,必须是List。
如何保留引号?
【问题讨论】:
-
解析后你只有一个地图和数组。如果你想以 json 格式打印这些对象,你可以使用 JsonBuilder 或 JsonOutput。
println groovy.json.JsonOutput.toJson(soutJson) -
@daggett 这将是一个很好的答案
-
我尝试使用 JsonOutput 并返回一个字符串(尽管带有引号)。我认为我需要的不是字符串,而是 List 对象。我会尝试 JsonBuilder 看看是否有帮助。感谢您的建议。
-
@KennyCason,json 是一种文本格式。所以它是一个字符串。当你解析它时,你得到了 Map/List。当你格式化它时 - 你得到了 json 格式的字符串。您可以尝试生成 JSONObject/JSONArray 的 json.org 解析器 - 并且这些对象上的 toString() 会自动将它们转换为带引号的 json-formatted-string 等...
标签: json groovy double-quotes single-quotes jsonslurper