github.com/keysonzzz/kmg@v0.0.0-20151121023212-05317bfd7d39/encoding/kmgYaml/kmgYaml.go (about) 1 package kmgYaml 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "io" 7 "io/ioutil" 8 "os" 9 "strconv" 10 ) 11 12 func ReadFile(path string, obj interface{}) error { 13 b, err := ioutil.ReadFile(path) 14 if err != nil { 15 return err 16 } 17 return Unmarshal(b, obj) 18 } 19 20 func MustReadFile(path string, obj interface{}) { 21 err := ReadFile(path, obj) 22 if err != nil { 23 panic(err) 24 } 25 } 26 27 func MustMarshal(obj interface{}) []byte { 28 out, err := Marshal(obj) 29 if err != nil { 30 panic(err) 31 } 32 return out 33 } 34 35 func MustUnmarshal(in []byte, obj interface{}) { 36 err := Unmarshal(in, obj) 37 if err != nil { 38 panic(err) 39 } 40 } 41 42 func WriteFile(path string, obj interface{}) error { 43 out, err := Marshal(obj) 44 if err != nil { 45 return err 46 } 47 return ioutil.WriteFile(path, out, os.FileMode(0777)) 48 } 49 50 func MustWriteFile(path string, obj interface{}) { 51 err := WriteFile(path, obj) 52 if err != nil { 53 panic(err) 54 } 55 } 56 57 func Yaml2JsonIo(r io.Reader, w io.Writer) (err error) { 58 input, err := ioutil.ReadAll(r) 59 if err != nil { 60 return 61 } 62 var data interface{} 63 err = Unmarshal(input, &data) 64 if err != nil { 65 return 66 } 67 data, err = Yaml2JsonTransformData(data) 68 if err != nil { 69 return 70 } 71 output, err := json.Marshal(data) 72 if err != nil { 73 return 74 } 75 _, err = w.Write(output) 76 return 77 } 78 79 func Yaml2JsonIndentIo(r io.Reader, w io.Writer) (err error) { 80 input, err := ioutil.ReadAll(r) 81 if err != nil { 82 return 83 } 84 var data interface{} 85 err = Unmarshal(input, &data) 86 if err != nil { 87 return 88 } 89 data, err = Yaml2JsonTransformData(data) 90 if err != nil { 91 return 92 } 93 output, err := json.MarshalIndent(data, "", " ") 94 if err != nil { 95 return 96 } 97 _, err = w.Write(output) 98 return 99 } 100 101 //先 Yaml2JsonIo , 后 Json2YamlIo 可能不会获得完全一致的结果 102 func Json2YamlIo(r io.Reader, w io.Writer) error { 103 input, err := ioutil.ReadAll(r) 104 if err != nil { 105 return err 106 } 107 var data interface{} 108 err = json.Unmarshal(input, &data) 109 if err != nil { 110 return err 111 } 112 output, err := Marshal(data) 113 if err != nil { 114 return err 115 } 116 _, err = w.Write(output) 117 return err 118 } 119 120 func Yaml2JsonTransformData(in interface{}) (out interface{}, err error) { 121 switch in.(type) { 122 case map[interface{}]interface{}: 123 o := make(map[string]interface{}) 124 for k, v := range in.(map[interface{}]interface{}) { 125 sk := "" 126 switch k.(type) { 127 case string: 128 sk = k.(string) 129 case int: 130 sk = strconv.Itoa(k.(int)) 131 default: 132 return nil, fmt.Errorf("type not match: expect map key string or int get: %T", k) 133 } 134 v, err = Yaml2JsonTransformData(v) 135 if err != nil { 136 return nil, err 137 } 138 o[sk] = v 139 } 140 return o, nil 141 case []interface{}: 142 in1 := in.([]interface{}) 143 len1 := len(in1) 144 o := make([]interface{}, len1) 145 for i := 0; i < len1; i++ { 146 o[i], err = Yaml2JsonTransformData(in1[i]) 147 if err != nil { 148 return nil, err 149 } 150 } 151 return o, nil 152 default: 153 return in, nil 154 } 155 } 156 157 func debugPrintf(s string, sa ...interface{}) { 158 fmt.Printf(s, sa...) 159 }