處理 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 來剖析給定的 TOML。
由於 TomlSlurper
會傳回純粹的 Groovy 物件實例,而不會在後端有任何特殊的 TOML 類別,因此它的使用是透明的。事實上,TomlSlurper
的結果符合 GPath 表達式。GPath 是一種強大的表達式語言,由多個支援不同資料格式的 slurper 所支援(例如支援 XML 的 XmlSlurper
)。
有關更多詳細資料,請查看 GPath 表達式 部分。 |
下表提供了 TOML 類型和對應 Groovy 資料類型的概觀
TOML | Groovy |
---|---|
字串 |
|
數字 |
|
物件 |
|
陣列 |
|
true |
|
false |
|
null |
|
日期 |
|
每當 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'
'''