groovy加载YAML文件修改写入文件

groovy load YAML file modify and write it in a file

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

您的代码存在问题,您正试图以列表的形式访问 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