簡體   English   中英

刪除YAML文件中鍵值對之前的破折號

[英]Remove the dash present before the key value pair in a YAML file

眾所周知,在鍵值對之前,YAML文件中的破折號( - )是必要的,以表明它是單獨的塊(這是我的想法)。 圖1顯示了我使用YamlBeans jar生成的YAML。

field1:
-  childfield1:
      datafield1:
         param1:
            childparam: paramvalue
         param2:
            childparam2: paramvalue
         param3:
            childparam3: paramvalue
      datafield2: value2

對於無法更改的代碼庫,我必須以某種方式創建如圖2所示的YAML(在yaml文件的每一行中都附加了一個選項卡),或者刪除了破折號。 您可以清楚地觀察到,圖1中只有兩條垂直細線,而圖2中只有3條垂直細線,顯示了塊的對齊方式。

我要實現的是從文件的第一個塊(子字段)中刪除該破折號。 使用YAML文件讀取器和寫入器始終會引入破折號。

快速瀏覽(但不熟悉)YamlBeans,看起來很難將Emitter的行為子類化。 但是,一種選擇是在內存中生成臨時形式,然后在寫出文件時操縱結果。 例如

    // let YamlWriter write its contents to an in-memory buffer
    StringWriter temp = new StringWriter();
    YamlWriter yamlOut = new YamlWriter(temp);
    yamlOut.write(someObject);

    // then dump the in-memory buffer out to a file, manipulating lines that
    // start with a dash
    PrintWriter out = new PrintWriter(new FileWriter(new File("someoutput.dat")));
    LineNumberReader in = new LineNumberReader(new StringReader(temp.toString()));
    String line;
    while ((line = in.readLine()) != null) {
        if (line.startsWith("-")) {
            line = line.substring(1);
        }
        out.println(line);
    }

我的細節可能不對,但是希望對臨時副本進行簡單操作的方法足夠清晰。

如果我親自進行此操作,則可能會編寫一個java.io.Writer的自定義子類,並即時進行操作(但我沒有足夠詳細地了解過YamlWriter / Emitter來提供如何執行操作的示例那)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM