github.com/zhongdalu/gf@v1.0.0/g/encoding/gjson/gjson_func.go (about) 1 // Copyright 2017 gf Author(https://github.com/zhongdalu/gf). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/zhongdalu/gf. 6 7 package gjson 8 9 //func MarshalOrdered(value interface{}) ([]byte, error) { 10 // buffer := bytes.NewBuffer(nil) 11 // rv := reflect.ValueOf(value) 12 // kind := rv.Kind() 13 // if kind == reflect.Ptr { 14 // rv = rv.Elem() 15 // kind = rv.Kind() 16 // } 17 // switch kind { 18 // case reflect.Slice: fallthrough 19 // case reflect.Array: 20 // buffer.WriteByte('[') 21 // length := rv.Len() 22 // for i := 0; i < length; i++ { 23 // if p, err := MarshalOrdered(rv.Index(i).Interface()); err != nil { 24 // return nil, err 25 // } else { 26 // buffer.Write(p) 27 // if i < length - 1 { 28 // buffer.WriteByte(',') 29 // } 30 // } 31 // } 32 // buffer.WriteByte(']') 33 // case reflect.Map: fallthrough 34 // case reflect.Struct: 35 // m := gconv.Map(value, "json") 36 // keys := make([]string, len(m)) 37 // index := 0 38 // for key := range m { 39 // keys[index] = key 40 // index++ 41 // } 42 // sort.Strings(keys) 43 // buffer.WriteByte('{') 44 // for i, key := range keys { 45 // if p, err := MarshalOrdered(m[key]); err != nil { 46 // return nil, err 47 // } else { 48 // buffer.WriteString(fmt.Sprintf(`"%s":%s`, key, string(p))) 49 // if i < index - 1 { 50 // buffer.WriteByte(',') 51 // } 52 // } 53 // } 54 // buffer.WriteByte('}') 55 // default: 56 // if p, err := json.Marshal(value); err != nil { 57 // return nil, err 58 // } else { 59 // buffer.Write(p) 60 // } 61 // } 62 // return buffer.Bytes(), nil 63 //}