【问题标题】:groovy load YAML file modify and write it in a filegroovy 加载 YAML 文件修改并写入文件
【发布时间】:2016-04-12 15:45:51
【问题描述】:

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

【问题讨论】:

  • 请看this是否有帮助

标签: groovy yaml snakeyaml


【解决方案1】:

您的代码的问题是您试图以列表的形式访问Map.Entry 对象'file'。这里 yaml 数据中的 'Stack' 元素是一个包含两个 Map 的列表。所以修改值的正确方法是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2021-02-10
    • 2021-05-31
    • 2019-06-30
    • 1970-01-01
    相关资源
    最近更新 更多