github.com/lyraproj/hiera@v1.0.0-rc4/yaml2json/main.go (about)

     1  // Utility program to convert yaml on stdin to formatted json on stdout
     2  package main
     3  
     4  import (
     5  	"encoding/json"
     6  	"io/ioutil"
     7  	"log"
     8  	"os"
     9  
    10  	"gopkg.in/yaml.v3"
    11  )
    12  
    13  func stringKeys(x interface{}) interface{} {
    14  	switch x := x.(type) {
    15  	case map[interface{}]interface{}:
    16  		m := map[string]interface{}{}
    17  		for k, v := range x {
    18  			m[k.(string)] = stringKeys(v)
    19  		}
    20  		return m
    21  	case []interface{}:
    22  		for i, v := range x {
    23  			x[i] = stringKeys(v)
    24  		}
    25  	}
    26  	return x
    27  }
    28  
    29  func main() {
    30  	data, err := ioutil.ReadAll(os.Stdin)
    31  	if err == nil {
    32  		var body interface{}
    33  		if err = yaml.Unmarshal(data, &body); err == nil {
    34  			var bytes []byte
    35  			if bytes, err = json.MarshalIndent(stringKeys(body), ``, ` `); err == nil {
    36  				if _, err = os.Stdout.Write(bytes); err == nil {
    37  					return
    38  				}
    39  			}
    40  		}
    41  	}
    42  	log.Fatal(err.Error())
    43  }