groovy加载YAML文件修改并将其写入文件

时间:2016-01-08 03:13:51

标签: groovy yaml snakeyaml

我有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

1 个答案:

答案 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