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  }