From 46777d69e41f8ef8a262c78dec1be9fd7390bc96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=94=E5=AD=90?= <97783391@qq.com> Date: Tue, 15 Aug 2023 20:48:11 +0800 Subject: [PATCH] v1.2.6 --- utils/app.go | 12 ++++++++---- utils/array.go | 19 +++++++++++++++++++ utils/json.go | 35 ++++++++++++++++++++++++++++++++++- 3 files changed, 61 insertions(+), 5 deletions(-) diff --git a/utils/app.go b/utils/app.go index 901b22c..41149c9 100644 --- a/utils/app.go +++ b/utils/app.go @@ -51,6 +51,7 @@ func init() { Array.Remove = ArrayRemove Array.Unique = ArrayUnique[any] Array.Empty = ArrayEmpty[any] + Array.MapWithField = ArrayMapWithField Password.Create = PasswordCreate Password.Verify = PasswordVerify Rand.Int = RandInt @@ -67,6 +68,7 @@ func init() { Json.Encode = JsonEncode Json.Decode = JsonDecode Json.Get = JsonGet + Json.String = JsonString Format.Query = FormatQuery Parse.ParamsBefore = ParseParamsBefore Parse.Params = ParseParams @@ -138,10 +140,11 @@ var In struct { } var Array struct { - Filter func(array []string) (slice []string) - Remove func(array []string, args ...string) (slice []string) - Unique func(array []any) (slice []any) - Empty func(array []any) (slice []any) + Filter func(array []string) (slice []string) + Remove func(array []string, args ...string) (slice []string) + Unique func(array []any) (slice []any) + Empty func(array []any) (slice []any) + MapWithField func(array []map[string]any, field any) (slice []any) } var Password struct { @@ -170,6 +173,7 @@ var Json struct { Encode func(value any) (result string) Decode func(value any) (result any) Get func(value any, key any) (result any, err error) + String func(value any) (result string) } var Format struct { diff --git a/utils/array.go b/utils/array.go index ea46621..7a33ad5 100644 --- a/utils/array.go +++ b/utils/array.go @@ -1,6 +1,7 @@ package utils import ( + "github.com/spf13/cast" "strings" ) @@ -51,3 +52,21 @@ func ArrayEmpty[T any](array []T) (slice []any) { } return slice } + +// ArrayMapWithField - 数组Map保留指定字段 +func ArrayMapWithField(array []map[string]any, field any) (slice []any) { + + // 获取字段 + keys := cast.ToStringSlice(Unity.Keys(field)) + + if IsEmpty(keys) { + return cast.ToSlice(array) + } + + for _, item := range array { + val := Map.WithField(cast.ToStringMap(item), keys) + slice = append(cast.ToSlice(slice), val) + } + + return slice +} diff --git a/utils/json.go b/utils/json.go index 6bf7cbe..bf191e5 100644 --- a/utils/json.go +++ b/utils/json.go @@ -4,6 +4,7 @@ import ( "fmt" json "github.com/json-iterator/go" "github.com/spf13/cast" + "sort" "strings" ) @@ -41,4 +42,36 @@ func JsonGet(jsonString any, key any) (result any, err error) { } return result, nil -} \ No newline at end of file +} + +// JsonString map转json字符串 +func JsonString(data any) (result string) { + + item := cast.ToStringMap(data) + + // 将map的key排序 + keys := make([]string, 0, len(item)) + for key := range item { + keys = append(keys, key) + } + sort.Strings(keys) + + // 构建有序的map + order := make(map[string]any) + for _, key := range keys { + order[key] = item[key] + } + + // 转换为JSON字符串 + bytes, err := json.Marshal(order) + if err != nil { + return "" + } + + // 判断是否为空 + if string(bytes) == "{}" { + return "" + } + + return string(bytes) +}