LoginSignup
2
2

More than 5 years have passed since last update.

golangでjsonとyamlを変換

Posted at

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
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2