JsonOutput负责将groovy对象序列化为json字符串,跟JsonSlurper刚好相反。
JsonOutput类具有多态的静态json处理方法。每个方法的实现对应不同的参数类型。这些静态方法可以通过静态导入的方式导入后直接使用。
方法的执行结果为JSON格式的字符串。def json = JsonOutput.toJson([name: 'John Doe', age: 42])
assert json == '{"name":"John Doe","age":42}'
JsonOutput 不仅仅支持数据主类型,map,list等类型的JSON序列化d,甚至可以序列化POGOs,也就是普通的Groovy对象。class Person { String name }
def json = JsonOutput.toJson([ new Person(name: 'John'), new Person(name: 'Max') ])
assert json == '[{"name":"John"},{"name":"Max"}]'
上面的例子中,序列化的JSON字符串默认情况下没有对齐。所幸的是,JsonOutput提供了prettyPrint方法帮助我们序列化为更易阅读的JSON格式。def json = JsonOutput.toJson([name: 'John Doe', age: 42])
assert json == '{"name":"John Doe","age":42}'
assert JsonOutput.prettyPrint(json) == '''\
{
"name": "John Doe",
"age": 42
}'''.stripIndent()
prettyPrint方法接收字符串参数。该方法不能与其他JsonOutput方法一起使用,只能作用于任意的JSON格式字符串。
Groovy中还有一个方法可以创建JSON,那就是通过JsonBuilder类或者StreamingJsonBuilder类。这两个类都提供了DSL语法使得我们可以创建一个对象图,然后转换为JSON。