diff options
author | Alexander NeonXP Kiryukhin <i@neonxp.ru> | 2024-05-12 18:17:33 +0300 |
---|---|---|
committer | Alexander NeonXP Kiryukhin <i@neonxp.ru> | 2024-05-12 18:17:33 +0300 |
commit | d255ca1955b3658aaf12aba84ded8693d2be482f (patch) | |
tree | 99248b627073d82b0bbeccea2236357cc7a2f7a0 | |
parent | fd22b325e5c1fd29f7d8e91a6b78be2cc482f0ef (diff) |
Возможность сохранения json
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | go.sum | 1 | ||||
-rw-r--r-- | main.go | 21 | ||||
-rw-r--r-- | readme.md | 2 |
4 files changed, 20 insertions, 5 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e192558 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +test/*
\ No newline at end of file @@ -1,3 +1,4 @@ +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -1,7 +1,9 @@ package main import ( + "encoding/json" "flag" + "fmt" "os" "strings" @@ -11,15 +13,15 @@ import ( var ( input = stringsArray{} output = "" - indent = 2 replaceArrays = false + outType = "yaml" ) func main() { flag.Var(&input, "i", "input files") flag.StringVar(&output, "o", "out.yaml", "output file") - flag.IntVar(&indent, "indent", 2, "changes the used indentation used when encoding") flag.BoolVar(&replaceArrays, "replace_arrays", false, "replace arrays with same keys. Merge otherwise.") + flag.StringVar(&outType, "out_type", "yaml", "output type, 'yaml' (default) or 'json'") flag.Parse() result := map[string]any{} @@ -42,8 +44,15 @@ func main() { } defer fp.Close() - enc := yaml.NewEncoder(fp) - enc.SetIndent(indent) + var enc Encoder + switch outType { + case "yaml": + enc = yaml.NewEncoder(fp) + case "json": + enc = json.NewEncoder(fp) + default: + panic(fmt.Errorf("unknown output type: %s", outType)) + } if err := enc.Encode(result); err != nil { panic(err) } @@ -86,3 +95,7 @@ func (i *stringsArray) Set(value string) error { func (i *stringsArray) String() string { return strings.Join(*i, ",") } + +type Encoder interface { + Encode(any) error +} @@ -16,8 +16,8 @@ merger -i file1.yaml -i file2.yaml -i fileN.yaml -o output.yaml Есть ещё ключи: -- `-indent 2` устанавливает отступ в результирующем yaml'е - `-replace_arrays false` - если true то массивы по одинаковым ключам будут перезатираться. По умолчанию - соединяться. +- `-out_type` - выходной формат `yaml` (умолчание) или `json` ## Пример |