go-yaml / yaml

YAML support for the Go language.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Yaml encoder writing tag of merge node `!!merge` in output

SameerPr opened this issue · comments

Hi,
I am trying to parse a Yaml file with yaml.v3 and do some modifications on the nodes but when I am writing back the content to a file, the yaml encoder adds an extra merge tag (!!merge) wherever i have used <<.

func main() {

	sourceYaml := `
demo:
  - name: some_name
    location:
      country:
        meta_data: &meta_data
          name: some_place
          description: "name of a place"
      <<: *meta_data`

	node := yaml.Node{}
	err := yaml.Unmarshal([]byte(sourceYaml), &node)
	if err != nil {
		log.Fatalf(err.Error())
		os.Exit(1)
	}

	var b bytes.Buffer
	yamlEncoder := yaml.NewEncoder(&b)
	err = yamlEncoder.Encode(&node)
	if err != nil {
		log.Fatalf(err.Error())
		os.Exit(1)
	}

	fmt.Println(b.String())
	err = os.WriteFile("test.yaml", b.Bytes(), 0o664)
	if err != nil {
		log.Fatalf(err.Error())
		os.Exit(1)
	}
}

Above code prints

demo:
  - name: some_name
    location:
      country:
        meta_data: &meta_data
          name: some_place
          description: "name of a place"
      !!merge <<: *meta_data

Can you please check this?
Thanks