處理 YAML
Groovy 有個可選的 groovy-yaml
模組,提供在 Groovy 物件和 YAML 之間轉換的功能。專門用於 YAML 序列化和剖析的類別可以在 groovy.yaml
套件中找到。
1. YamlSlurper
YamlSlurper
是一個類別,可以將 YAML 文字或讀取器內容剖析成 Groovy 資料結構(物件),例如地圖、清單和 Integer
、Double
、Boolean
和 String
等基本類型。
這個類別附帶許多超載的 parse
方法,以及一些特殊方法,例如 parseText
等。在以下範例中,我們將使用 parseText
方法。它會剖析一個 YAML String
,並遞迴地將它轉換成物件的清單或地圖。其他 parse*
方法類似,它們會傳回一個 YAML String
,但參數類型不同。
def ys = new YamlSlurper()
def yaml = ys.parseText '''
language: groovy
sudo: required
dist: trusty
matrix:
include:
- jdk: openjdk10
- jdk: oraclejdk9
- jdk: oraclejdk8
before_script:
- |
unset _JAVA_OPTIONS
'''
assert 'groovy' == yaml.language
assert 'required' == yaml.sudo
assert 'trusty' == yaml.dist
assert ['openjdk10', 'oraclejdk9', 'oraclejdk8'] == yaml.matrix.include.jdk
assert ['unset _JAVA_OPTIONS'] == yaml.before_script*.trim()
請注意,結果是一個純粹的地圖,可以像一般的 Groovy 物件實例那樣處理。YamlSlurper
會根據 YAML Ain’t Markup Language (YAML™) 定義的規則剖析指定的 YAML。
由於 YamlSlurper
會傳回純粹的 Groovy 物件實例,而不會在後端使用任何特殊的 YAML 類別,因此它的用法很透明。事實上,YamlSlurper
的結果符合 GPath 表達式。GPath 是一種強大的表達式語言,由多個針對不同資料格式的 slurper 支援(例如,XmlSlurper
就是針對 XML 的一個範例)。
如需更多詳細資訊,請參閱 GPath 表達式 部分。 |
下表概述了 YAML 類型和對應的 Groovy 資料類型
YAML | Groovy |
---|---|
字串 |
|
數字 |
|
物件 |
|
陣列 |
|
true |
|
false |
|
null |
|
日期 |
|
當 YAML 中的值為 null 時,YamlSlurper 會補充 Groovy null 值。這與其他 YAML 解析器不同,後者會以程式庫提供的單例物件表示 null 值。
|
1.1. 建構器
建立 YAML 的另一種方法是使用 YamlBuilder
。建構器提供一個 DSL,允許制定一個物件圖,然後轉換為 YAML。
def builder = new YamlBuilder()
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"
make: "Holden"
year: 2006
country: "Australia"
homepage: "http://example.org"
record:
type: "speed"
description: "production pickup truck with speed of 271kph"
'''