有没有办法以可格式打印Groovy Collection?

时间:2014-09-26 20:14:36

标签: collections groovy format

我经常需要模拟一些数据响应以进行单元测试。我希望能够收集真实的回复并将其置于模拟中。但Groovy打印出Collections而不包含字符串值。

def foo = ["foo":"bar"]
println foo
def bar = ["foo","bar"]
println bar 

返回

[foo:bar]
[foo, bar]

因此,当我有一个庞大而复杂的json结构时,我必须花费很长时间进行繁琐且容易出错的编辑。我可能会写一个递归函数来为我打印这个,但我很好奇是否有一个简单的方法来做它。

2 个答案:

答案 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