mirror of
https://gitee.com/johng/gf
synced 2026-06-28 10:16:09 +08:00
gjson增加Append方法,gconv增加Ints/Uints/Strings方法
This commit is contained in:
@ -21,6 +21,8 @@ import (
|
||||
"gitee.com/johng/gf/g/util/gstr"
|
||||
"time"
|
||||
"gitee.com/johng/gf/g/encoding/gjson/internal/rwmutex"
|
||||
"fmt"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -73,6 +75,14 @@ func New(value interface{}, safe...bool) *Json {
|
||||
return j
|
||||
}
|
||||
|
||||
// 创建一个非并发安全的Json对象
|
||||
func NewUnsafe(value...interface{}) *Json {
|
||||
if len(value) > 0 {
|
||||
return New(value[0], false)
|
||||
}
|
||||
return New(nil, false)
|
||||
}
|
||||
|
||||
// 编码go变量为json字符串,并返回json字符串指针
|
||||
func Encode (v interface{}) ([]byte, error) {
|
||||
return json.Marshal(v)
|
||||
@ -508,6 +518,18 @@ func (j *Json) Get(pattern...string) interface{} {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 指定pattern追加元素
|
||||
func (j *Json) Append(pattern string, value interface{}) error {
|
||||
p := j.getPointerByPattern(pattern)
|
||||
switch t := (*p).(type) {
|
||||
case []interface{}:
|
||||
*p = append((*p).([]interface{}), value)
|
||||
return nil
|
||||
default:
|
||||
return errors.New(fmt.Sprintf("invalid type '%s' to append", t))
|
||||
}
|
||||
}
|
||||
|
||||
// 根据pattern层级查找**变量指针**
|
||||
// 检索方式:例如检索 a.a.a ,值为1
|
||||
// 1. 检索 a.a.a.a 是否存在对应map的键名;
|
||||
@ -656,4 +678,16 @@ func (j *Json) ToStruct(o interface{}) error {
|
||||
j.mu.RLock()
|
||||
defer j.mu.RUnlock()
|
||||
return gconv.MapToStruct(j.ToMap(), o)
|
||||
}
|
||||
|
||||
// 打印Json对象
|
||||
func (j *Json) Dump() error {
|
||||
j.mu.RLock()
|
||||
defer j.mu.RUnlock()
|
||||
if b, err := j.ToJsonIndent(); err != nil {
|
||||
return err
|
||||
} else {
|
||||
fmt.Println(string(b))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@ -111,18 +111,71 @@ func String(i interface{}) string {
|
||||
}
|
||||
}
|
||||
|
||||
// 任意类型转换为[]int类型
|
||||
func Ints(i interface{}) []int {
|
||||
return nil
|
||||
if i == nil {
|
||||
return nil
|
||||
}
|
||||
if r, ok := i.([]int); ok {
|
||||
return r
|
||||
} else {
|
||||
switch i.(type) {
|
||||
case []int8, []int16, []int32, []int64,
|
||||
[]uint, []uint8, []uint16, []uint32, []uint64,
|
||||
[]bool, []string,
|
||||
[]float32, []float64:
|
||||
array := make([]int, len(r))
|
||||
for k, v := range r {
|
||||
array[k] = Int(v)
|
||||
}
|
||||
return array
|
||||
}
|
||||
}
|
||||
return []int{Int(i)}
|
||||
}
|
||||
|
||||
// 任意类型转换为[]uint类型
|
||||
func Uints(i interface{}) []uint {
|
||||
return nil
|
||||
if i == nil {
|
||||
return nil
|
||||
}
|
||||
if r, ok := i.([]uint); ok {
|
||||
return r
|
||||
} else {
|
||||
switch i.(type) {
|
||||
case []int, []int8, []int16, []int32, []int64, []uint8, []uint16, []uint32, []uint64,
|
||||
[]bool, []string, []float32, []float64:
|
||||
array := make([]uint, len(r))
|
||||
for k, v := range r {
|
||||
array[k] = Uint(v)
|
||||
}
|
||||
return array
|
||||
}
|
||||
}
|
||||
return []uint{Uint(i)}
|
||||
}
|
||||
|
||||
// 任意类型转换为[]string类型
|
||||
func Strings(i interface{}) []string {
|
||||
return nil
|
||||
if i == nil {
|
||||
return nil
|
||||
}
|
||||
if r, ok := i.([]string); ok {
|
||||
return r
|
||||
} else if r, ok := i.([]interface{}); ok {
|
||||
strs := make([]string, len(r))
|
||||
for k, v := range r {
|
||||
strs[k] = String(v)
|
||||
} else {
|
||||
switch i.(type) {
|
||||
case []int, []int8, []int16, []int32, []int64,
|
||||
[]uint, []uint8, []uint16, []uint32, []uint64,
|
||||
[]bool, []float32, []float64:
|
||||
array := make([]string, len(r))
|
||||
for k, v := range r {
|
||||
array[k] = String(v)
|
||||
}
|
||||
return array
|
||||
}
|
||||
return strs
|
||||
}
|
||||
return []string{fmt.Sprintf("%v", i)}
|
||||
}
|
||||
|
||||
@ -9,23 +9,27 @@ package gutil
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"encoding/json"
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
// 格式化打印变量(类似于PHP-vardump)
|
||||
func Dump(i...interface{}) {
|
||||
for _, v := range i {
|
||||
buffer := &bytes.Buffer{}
|
||||
encoder := json.NewEncoder(buffer)
|
||||
encoder.SetEscapeHTML(false)
|
||||
encoder.SetIndent("", "\t")
|
||||
if err := encoder.Encode(v); err == nil {
|
||||
fmt.Print(buffer.String())
|
||||
if b, ok := v.([]byte); ok {
|
||||
fmt.Print(string(b))
|
||||
} else {
|
||||
fmt.Errorf("%s", err.Error())
|
||||
buffer := &bytes.Buffer{}
|
||||
encoder := json.NewEncoder(buffer)
|
||||
encoder.SetEscapeHTML(false)
|
||||
encoder.SetIndent("", "\t")
|
||||
if err := encoder.Encode(v); err == nil {
|
||||
fmt.Print(buffer.String())
|
||||
} else {
|
||||
fmt.Errorf("%s", err.Error())
|
||||
}
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"gitee.com/johng/gf/g/util/gutil"
|
||||
"gitee.com/johng/gf/g/os/gfile"
|
||||
"gitee.com/johng/gf/g/encoding/gjson"
|
||||
)
|
||||
|
||||
func main() {
|
||||
gutil.Dump(gfile.ScanDir("/tmp", "*test*"))
|
||||
gutil.Dump(gfile.Glob("/tmp/*", true))
|
||||
j := gjson.NewUnsafe([]int{1,2,3})
|
||||
j.Append("", 4)
|
||||
j.Append("", "abc")
|
||||
j.Dump()
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user