https://qiita.com/daichirata/items/5d751a8a4544434c27b0
これを見て衝撃を受けて、書かずにはいられなかった。
yamlのアンカーとエイリアスには対応してないらしい。
yj.go
package main
import (
"flag"
"fmt"
"io/ioutil"
"os"
"encoding/json"
"github.com/ghodss/yaml"
yaml2 "gopkg.in/yaml.v2"
)
func main() {
var (
jsonFlag bool
yamlFlag bool
)
flag.BoolVar(&jsonFlag, "json", false, "bool flag")
flag.BoolVar(&yamlFlag, "yaml", false, "bool flag")
flag.Parse()
buf, err := ioutil.ReadAll(os.Stdin)
if err != nil {
panic(err)
}
m := make(map[string]interface{})
err = yaml.Unmarshal(buf, &m)
if err != nil {
panic(err)
}
if yamlFlag {
d, err := yaml2.Marshal(&m)
if err != nil {
panic(err)
}
fmt.Printf("%s", d)
}
if jsonFlag {
d, err := json.Marshal(&m)
if err != nil {
panic(err)
}
fmt.Printf("%s", d)
}
}
ビルドと実行
go build yj.go
cat <<EOD | ./yj -yaml | ./yj -json
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
EOD
echo
cat <<EOD | ./yj -json | ./yj -yaml
---
glossary:
title: example glossary
GlossDiv:
title: S
GlossList:
GlossEntry:
ID: SGML
SortAs: SGML
GlossTerm: Standard Generalized Markup Language
Acronym: SGML
Abbrev: ISO 8879:1986
GlossDef:
para: A meta-markup language, used to create markup languages such as DocBook.
GlossSeeAlso:
- GML
- XML
GlossSee: markup
EOD