mikefarah / yq

yq is a portable command-line YAML, JSON, XML, CSV, TOML and properties processor
https://mikefarah.gitbook.io/yq/
MIT License
11.29k stars 565 forks source link

Simple usage example of the public API #2021

Open Skarlso opened 2 months ago

Skarlso commented 2 months ago

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.

jaronnie commented 1 week ago

how to disable log

jaronnie commented 1 week ago

image

Skarlso commented 1 week ago

Like this:

package controllers

import (
    glog "gopkg.in/op/go-logging.v1"
)

// In production main func will take care of setting the log yq-lib log level.
// In test we count on this to set the default log level for all tests.
// We do this because yqlib log is very chatty even if it is sometimes very useful.
// Of course in an individual test one could change the level and reset to the default
// via a defer call.
func init() {
    glog.SetLevel(glog.WARNING, "yq-lib")
}
jaronnie commented 1 week ago

Thanks