2016-01-08 57 views
2

我有YMAL文件,使用groovy我想讀取和修改一個元素值,然後將其寫入另一個文件。groovy加載YAML文件修改並將其寫入文件

使用此代碼嘗試修改從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

請看看[這裏](http://stackoverflow.com/questions/18311244/read-a-yaml-file-在常規)是有幫助的 – Rao

回答

1

與您的代碼的問題是,您試圖訪問一個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