util/json.go

94 lines
1.4 KiB
Go
Raw Normal View History

2024-01-19 02:02:30 +08:00
package util
2024-01-20 03:23:26 +08:00
import (
2024-01-23 23:02:08 +08:00
"encoding/json"
2024-01-20 03:23:26 +08:00
)
2024-01-19 02:02:30 +08:00
2024-01-19 11:40:13 +08:00
type JSON struct {
2024-01-23 23:02:08 +08:00
result []byte
err error
isArray bool
2024-01-19 02:02:30 +08:00
}
2024-01-20 03:23:26 +08:00
func NewJSONResult(data []byte) *JSON {
2024-01-23 23:02:08 +08:00
m1 := make(map[string]any)
err1 := json.Unmarshal(data, &m1)
if err1 != nil {
m2 := make([]map[string]any, 0)
err2 := json.Unmarshal(data, &m2)
if err2 != nil {
return nil
}
return NewJSON(m2, true)
}
return NewJSON(m1, false)
2024-01-20 03:23:26 +08:00
}
func NewJSON(v any, isArray bool) *JSON {
2024-01-23 23:02:08 +08:00
res := &JSON{}
res.result, res.err = json.Marshal(v)
res.isArray = isArray
return res
2024-01-19 02:02:30 +08:00
}
2024-01-19 11:40:13 +08:00
func (j *JSON) Bytes() []byte {
2024-01-23 23:02:08 +08:00
return j.result
2024-01-19 02:02:30 +08:00
}
2024-01-19 11:40:13 +08:00
func (j *JSON) String() string {
2024-01-23 23:02:08 +08:00
return string(j.result)
2024-01-19 02:02:30 +08:00
}
2024-01-20 03:23:26 +08:00
func (j *JSON) Map(idx ...int) map[string]any {
2024-01-23 23:02:08 +08:00
if j.result == nil {
return nil
}
if !j.isArray {
m := make(map[string]any)
err := json.Unmarshal(j.result, &m)
if err != nil {
return nil
}
return m
}
i := 0
if len(idx) > 0 {
i = idx[0]
}
m := make([]map[string]any, 0)
err := json.Unmarshal(j.result, &m)
if err != nil {
return nil
}
ml := len(m)
if ml == 0 {
return nil
}
if i >= ml {
i = ml - 1
}
return m[i]
2024-01-20 03:23:26 +08:00
}
func (j *JSON) MapArray() []map[string]any {
2024-01-23 23:02:08 +08:00
if j.isArray {
m := make([]map[string]any, 0)
err := json.Unmarshal(j.result, &m)
if err != nil {
return nil
}
return m
} else {
m := make(map[string]any)
err := json.Unmarshal(j.result, &m)
if err != nil {
return nil
}
return []map[string]any{m}
}
2024-01-20 03:23:26 +08:00
}
2024-01-19 11:40:13 +08:00
func (j *JSON) Error() error {
2024-01-23 23:02:08 +08:00
return j.err
2024-01-19 02:02:30 +08:00
}