我有YMAL文件,使用groovy我想读取并修改一个元素值,然后将其写入另一个文件。
使用此代码,尝试将TopClass.py中的第一个文件值修改为changeclass.py。但它没有修改价值。
import org.yaml.snakeyaml.Yaml
class Test{
def static main(args){
Yaml yaml = new Yaml()
def Map map = (Map) yaml.load(data)
println map.Stack.file[0]
map.Stack.file[0]='changeclass.py'
println map.Stack.file[0]
}
def static String data="""
Date: 2001-11-23 15:03:17 -5
User: ed
Fatal:
Unknown variable "bar"
Stack:
- file: TopClass.py
line: 23
code: |
x = MoreObject("345\\n")
- file: MoreClass.py
line: 58
code: |-
foo = bar
"""
是否有样本groovy代码来读取YAML文件并修改并将其写入文件?
由于 SR
答案 0 :(得分:2)
您的代码存在的问题是您尝试将Map.Entry
对象'file'
作为列表进行访问。此处,您的yaml数据中的'Stack'
元素是包含两个地图的列表。因此,修改该值的正确方法是:
map.Stack[0].file = 'changeclass.py'
要将更改数据保存回文件,请使用dump()
方法。例如:
DumperOptions options = new DumperOptions()
options.setPrettyFlow(true)
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK)
yaml = new Yaml(options)
yaml.dump(map, new FileWriter(<filePath>))
您的案例中的输出将是:
Date: 2001-11-23T20:03:17Z
User: ed
Fatal: Unknown variable "bar"
Stack:
- file: changeclass.py
line: 23
code: |
x = MoreObject("345\n")
- file: MoreClass.py
line: 58
code: foo = bar