From 1124ff6a331a80915b41474ba5633cfa430b5fac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Tue, 6 May 2025 12:07:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=9F=BA=E4=BA=8Esjson?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E7=9A=84IJsonWrite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- abstract/json_write.go | 6 +++- implement/sjson_write.go | 74 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 implement/sjson_write.go diff --git a/abstract/json_write.go b/abstract/json_write.go index da7fb2d..3706c9e 100644 --- a/abstract/json_write.go +++ b/abstract/json_write.go @@ -10,11 +10,15 @@ package abstract // IJsonWrite json数据写入 type IJsonWrite interface { // Set 设置一个路径的值 - Set(dataPath string, data interface{}) error + Set(dataPath string, data any) error // Result 最终结果以字符串形式返回 Result() string // Map 最终结果以map返回 Map() (map[string]any, error) + // MapWithReceiver 外部指针接收返回值 + MapWithReceiver(receiver any) error // Array 最终结果以数组返回 Array() ([]any, error) + // ArrayWithReceiver 外部指针接收返回值 + ArrayWithReceiver(receiver any) error } diff --git a/implement/sjson_write.go b/implement/sjson_write.go new file mode 100644 index 0000000..c3179ab --- /dev/null +++ b/implement/sjson_write.go @@ -0,0 +1,74 @@ +// Package implement ... +// +// Description : implement ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2025-05-06 11:53 +package implement + +import ( + "git.zhangdeman.cn/zhangdeman/json_filter/abstract" + "git.zhangdeman.cn/zhangdeman/serialize" + "github.com/tidwall/sjson" + "sync" +) + +func NewSjsonWrite() abstract.IJsonWrite { + return &SjsonWrite{ + res: "", + l: &sync.RWMutex{}, + } +} + +type SjsonWrite struct { + res string + l *sync.RWMutex +} + +func (s *SjsonWrite) Set(dataPath string, data any) error { + var ( + err error + ) + + s.l.Lock() + defer s.l.Unlock() + if s.res, err = sjson.Set(s.res, dataPath, data); nil != err { + return err + } + return nil +} + +func (s *SjsonWrite) Result() string { + return s.res +} + +func (s *SjsonWrite) Map() (map[string]any, error) { + var ( + mapRes map[string]any + err error + ) + if err = s.MapWithReceiver(&mapRes); nil != err { + return nil, err + } + return mapRes, nil +} + +func (s *SjsonWrite) MapWithReceiver(receiver any) error { + return serialize.JSON.UnmarshalWithNumberForString(s.res, receiver) +} + +func (s *SjsonWrite) Array() ([]any, error) { + var ( + arrRes []any + err error + ) + if err = s.ArrayWithReceiver(&arrRes); nil != err { + return nil, err + } + return arrRes, nil +} + +func (s *SjsonWrite) ArrayWithReceiver(receiver any) error { + return serialize.JSON.UnmarshalWithNumberForString(s.res, receiver) +}