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 }