处理 TOML
Groovy 有一个可选的 groovy-toml
模块,它支持在 Groovy 对象和 TOML 之间进行转换。专用于 TOML 序列化和解析的类位于 groovy.toml
包中。
1. TomlSlurper
TomlSlurper
是一个类,它将 TOML 文本或读取器内容解析为 Groovy 数据结构(对象),例如映射、列表和基本类型,如 Integer
、Double
、Boolean
和 String
。
该类附带了许多重载的 parse
方法,以及一些特殊方法,如 parseText
等。对于下一个示例,我们将使用 parseText
方法。它解析 TOML String
并将其递归转换为对象列表或映射。其他 parse*
方法类似,它们都返回 TOML String
,但用于不同的参数类型。
def ts = new TomlSlurper()
def toml = ts.parseText '''
language = "groovy"
sudo = "required"
dist = "trusty"
before_script = [ "unset _JAVA_OPTIONS\\n\\n \\n" ]
[[matrix.include]]
jdk = "openjdk10"
[[matrix.include]]
jdk = "oraclejdk9"
[[matrix.include]]
jdk = "oraclejdk8"
'''
assert 'groovy' == toml.language
assert 'required' == toml.sudo
assert 'trusty' == toml.dist
assert ['openjdk10', 'oraclejdk9', 'oraclejdk8'] == toml.matrix.include.jdk
assert ['unset _JAVA_OPTIONS'] == toml.before_script*.trim()
请注意,结果是一个普通的映射,可以像普通的 Groovy 对象实例一样处理。TomlSlurper
根据 Tom's Obvious, Minimal Language 中定义的方式解析给定的 TOML。
由于 TomlSlurper
返回的是纯 Groovy 对象实例,背后没有任何特殊的 TOML 类,因此其用法是透明的。事实上,TomlSlurper
的结果符合 GPath 表达式。GPath 是一种强大的表达式语言,受多个不同数据格式的 slurper 支持(XmlSlurper
用于 XML 就是一个例子)。
有关更多详细信息,请参阅有关 GPath 表达式的部分。 |
下表概述了 TOML 类型和相应的 Groovy 数据类型
TOML | Groovy |
---|---|
string |
|
number |
|
object |
|
array |
|
true |
|
false |
|
null |
|
date |
基于 |
每当 TOML 中的值为 null 时,TomlSlurper 会用 Groovy 的 null 值来补充它。这与其他 TOML 解析器形成对比,后者使用库提供的单例对象来表示 null 值。 |
1.1. 构建器
从 Groovy 创建 TOML 的另一种方法是使用 TomlBuilder
。构建器提供了一个 DSL,允许形成一个对象图,然后将其转换为 TOML。
def builder = new TomlBuilder()
builder.records {
car {
name 'HSV Maloo'
make 'Holden'
year 2006
country 'Australia'
homepage new URL('http://example.org')
record {
type 'speed'
description 'production pickup truck with speed of 271kph'
}
}
}
assert builder.toString() == '''\
records.car.name = 'HSV Maloo'
records.car.make = 'Holden'
records.car.year = 2006
records.car.country = 'Australia'
records.car.homepage = 'http://example.org'
records.car.record.type = 'speed'
records.car.record.description = 'production pickup truck with speed of 271kph'
'''