github.com/sereiner/library@v0.0.0-20200518095232-1fa3e640cc5f/jsons/json.go (about) 1 package jsons 2 3 import ( 4 "encoding/json" 5 "reflect" 6 "strings" 7 ) 8 9 // Escape 把编码 \\u0026,\\u003c,\\u003e 替换为 &,<,> 10 func Escape(input string) string { 11 r := strings.Replace(input, "\\u0026", "&", -1) 12 r = strings.Replace(r, "\\u003c", "<", -1) 13 r = strings.Replace(r, "\\u003e", ">", -1) 14 r = strings.Replace(r, "\n", "", -1) 15 return r 16 } 17 18 //Unmarshal 反序列化JSON 19 func Unmarshal(buf []byte) (c map[string]interface{}, err error) { 20 c = make(map[string]interface{}) 21 err = json.Unmarshal(buf, &c) 22 return 23 } 24 25 //Marshal 序列化JSON 26 func Marshal(v interface{}, tag ...string) (b []byte, err error) { 27 28 tagName := "json" 29 if len(tag) != 0 { 30 tagName = tag[0] 31 } 32 33 switch tagName { 34 case "json": 35 return json.Marshal(v) 36 default: 37 t := reflect.TypeOf(v) 38 val := reflect.ValueOf(v) 39 mp := map[string]interface{}{} 40 for i := 0; i < t.NumField(); i++ { 41 sf := t.Field(i) 42 v, ok := sf.Tag.Lookup(tagName) 43 if ok { 44 mp[v] = val.Field(i).Interface() 45 } 46 } 47 return json.Marshal(mp) 48 } 49 }