mikefarah / yq

yq is a portable command-line YAML, JSON, XML, CSV, TOML and properties processor

Home Page:https://mikefarah.gitbook.io/yq/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Simple usage example of the public API

Skarlso opened this issue · comments

Hello.

I just would like to provide a basic usage example of the API that yq offers. I don't know if the API is stable, but currently, this works:

package main

import (
	"bytes"
	"fmt"
	"log"
	"strings"

	"github.com/mikefarah/yq/v4/pkg/yqlib"
)

func main() {
	dec := yqlib.NewYamlDecoder(yqlib.NewDefaultYamlPreferences())
	if err := dec.Init(strings.NewReader(`
a:
  b: val
`)); err != nil {
		log.Fatal(err)
	}

	node, err := dec.Decode()
	if err != nil {
		log.Fatal(err)
	}

	result, _ := yqlib.NewAllAtOnceEvaluator().EvaluateNodes(`.a.b = "nope
nope2
"`, node)
	fmt.Println(result)

	encoder := yqlib.NewYamlEncoder(yqlib.NewDefaultYamlPreferences())
	out := new(bytes.Buffer)
	printer := yqlib.NewPrinter(encoder, yqlib.NewSinglePrinterWriter(out))
	if err := printer.PrintResults(result); err != nil {
		log.Fatal(err)
	}
	fmt.Println(out.String())
}

I'm leaving this for anyone looking for examples for using the library instead of the CLI. I haven't found any documentation describing that, so most of the knowledge came from looking at the tests and the CLI.