我经常需要模拟一些数据响应以进行单元测试。我希望能够收集真实的回复并将其置于模拟中。但Groovy打印出Collections而不包含字符串值。
def foo = ["foo":"bar"]
println foo
def bar = ["foo","bar"]
println bar
返回
[foo:bar]
[foo, bar]
因此,当我有一个庞大而复杂的json结构时,我必须花费很长时间进行繁琐且容易出错的编辑。我可能会写一个递归函数来为我打印这个,但我很好奇是否有一个简单的方法来做它。
答案 0 :(得分:2)
不幸的是,没有简单的方法,但是你可以自己实现它。一个特别的解决方案:
class L extends LinkedList {
String toString() {
'[' + collect { "'$it'" }.join(',') + ']'
}
}
def l = new L()
l << 1
l << 2
assert l.toString() == "['1','2']"
当谈到JSON JsonOutput
类产生可输出的输出时:
import groovy.json.JsonOutput
JsonOutput.prettyPrint(JsonOutput.toJson([a:1]))
new groovy.json.JsonSlurper().parseText('''{
"a": 1
}''')
答案 1 :(得分:2)
对于琐碎的数据类型,有inspect
:
def m = [a:'a', b:42, c:[1,2,3]]
def d = m.inspect()
assert d=='''['a':'a', 'b':42, 'c':[1, 2, 3]]'''
m2 = Eval.me(d)
assert m==m2