首页 文章

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

提问于
浏览
1

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

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

回报

[foo:bar]
[foo, bar]

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

2 回答

  • 2

    对于 trivial 数据类型,有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
    
  • 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
    }''')
    

相关问题