add MarshalJSON interface implements for garray/gmap/gtime/gvar/gtree

This commit is contained in:
John
2019-07-13 17:48:16 +08:00
parent 8a7f4ab156
commit 1181b6ae3a
21 changed files with 197 additions and 3 deletions

View File

@ -8,6 +8,7 @@ package garray
import (
"bytes"
"encoding/json"
"fmt"
"math"
"sort"
@ -616,3 +617,10 @@ func (a *IntArray) String() string {
defer a.mu.RUnlock()
return fmt.Sprint(a.array)
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (a *IntArray) MarshalJSON() ([]byte, error) {
a.mu.RLock()
defer a.mu.RUnlock()
return json.Marshal(a.array)
}

View File

@ -8,6 +8,7 @@ package garray
import (
"bytes"
"encoding/json"
"fmt"
"math"
"sort"
@ -610,3 +611,10 @@ func (a *Array) String() string {
defer a.mu.RUnlock()
return fmt.Sprint(a.array)
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (a *Array) MarshalJSON() ([]byte, error) {
a.mu.RLock()
defer a.mu.RUnlock()
return json.Marshal(a.array)
}

View File

@ -8,6 +8,7 @@ package garray
import (
"bytes"
"encoding/json"
"fmt"
"math"
"sort"
@ -616,3 +617,10 @@ func (a *StringArray) String() string {
defer a.mu.RUnlock()
return fmt.Sprint(a.array)
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (a *StringArray) MarshalJSON() ([]byte, error) {
a.mu.RLock()
defer a.mu.RUnlock()
return json.Marshal(a.array)
}

View File

@ -8,6 +8,7 @@ package garray
import (
"bytes"
"encoding/json"
"fmt"
"math"
"sort"
@ -541,3 +542,10 @@ func (a *SortedIntArray) String() string {
defer a.mu.RUnlock()
return fmt.Sprint(a.array)
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (a *SortedIntArray) MarshalJSON() ([]byte, error) {
a.mu.RLock()
defer a.mu.RUnlock()
return json.Marshal(a.array)
}

View File

@ -8,6 +8,7 @@ package garray
import (
"bytes"
"encoding/json"
"fmt"
"math"
"sort"
@ -542,3 +543,10 @@ func (a *SortedArray) String() string {
defer a.mu.RUnlock()
return fmt.Sprint(a.array)
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (a *SortedArray) MarshalJSON() ([]byte, error) {
a.mu.RLock()
defer a.mu.RUnlock()
return json.Marshal(a.array)
}

View File

@ -8,6 +8,7 @@ package garray
import (
"bytes"
"encoding/json"
"fmt"
"math"
"sort"
@ -536,3 +537,10 @@ func (a *SortedStringArray) String() string {
defer a.mu.RUnlock()
return fmt.Sprint(a.array)
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (a *SortedStringArray) MarshalJSON() ([]byte, error) {
a.mu.RLock()
defer a.mu.RUnlock()
return json.Marshal(a.array)
}

View File

@ -7,6 +7,10 @@
package gmap
import (
"encoding/json"
"github.com/gogf/gf/g/util/gconv"
"github.com/gogf/gf/g/container/gvar"
"github.com/gogf/gf/g/internal/rwmutex"
)
@ -328,3 +332,8 @@ func (m *AnyAnyMap) Merge(other *AnyAnyMap) {
m.data[k] = v
}
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (m *AnyAnyMap) MarshalJSON() ([]byte, error) {
return json.Marshal(gconv.Map(m.Map()))
}

View File

@ -8,6 +8,8 @@
package gmap
import (
"encoding/json"
"github.com/gogf/gf/g/container/gvar"
"github.com/gogf/gf/g/internal/rwmutex"
"github.com/gogf/gf/g/util/gconv"
@ -330,3 +332,10 @@ func (m *IntAnyMap) Merge(other *IntAnyMap) {
m.data[k] = v
}
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (m *IntAnyMap) MarshalJSON() ([]byte, error) {
m.mu.RLock()
defer m.mu.RUnlock()
return json.Marshal(m.data)
}

View File

@ -7,6 +7,8 @@
package gmap
import (
"encoding/json"
"github.com/gogf/gf/g/internal/rwmutex"
)
@ -306,3 +308,10 @@ func (m *IntIntMap) Merge(other *IntIntMap) {
m.data[k] = v
}
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (m *IntIntMap) MarshalJSON() ([]byte, error) {
m.mu.RLock()
defer m.mu.RUnlock()
return json.Marshal(m.data)
}

View File

@ -7,6 +7,8 @@
package gmap
import (
"encoding/json"
"github.com/gogf/gf/g/internal/rwmutex"
"github.com/gogf/gf/g/util/gconv"
)
@ -307,3 +309,10 @@ func (m *IntStrMap) Merge(other *IntStrMap) {
m.data[k] = v
}
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (m *IntStrMap) MarshalJSON() ([]byte, error) {
m.mu.RLock()
defer m.mu.RUnlock()
return json.Marshal(m.data)
}

View File

@ -8,6 +8,8 @@
package gmap
import (
"encoding/json"
"github.com/gogf/gf/g/container/gvar"
"github.com/gogf/gf/g/internal/rwmutex"
"github.com/gogf/gf/g/util/gconv"
@ -332,3 +334,10 @@ func (m *StrAnyMap) Merge(other *StrAnyMap) {
m.data[k] = v
}
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (m *StrAnyMap) MarshalJSON() ([]byte, error) {
m.mu.RLock()
defer m.mu.RUnlock()
return json.Marshal(m.data)
}

View File

@ -8,6 +8,8 @@
package gmap
import (
"encoding/json"
"github.com/gogf/gf/g/internal/rwmutex"
"github.com/gogf/gf/g/util/gconv"
)
@ -310,3 +312,10 @@ func (m *StrIntMap) Merge(other *StrIntMap) {
m.data[k] = v
}
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (m *StrIntMap) MarshalJSON() ([]byte, error) {
m.mu.RLock()
defer m.mu.RUnlock()
return json.Marshal(m.data)
}

View File

@ -8,6 +8,8 @@
package gmap
import (
"encoding/json"
"github.com/gogf/gf/g/internal/rwmutex"
)
@ -309,3 +311,10 @@ func (m *StrStrMap) Merge(other *StrStrMap) {
m.data[k] = v
}
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (m *StrStrMap) MarshalJSON() ([]byte, error) {
m.mu.RLock()
defer m.mu.RUnlock()
return json.Marshal(m.data)
}

View File

@ -7,6 +7,10 @@
package gmap
import (
"encoding/json"
"github.com/gogf/gf/g/util/gconv"
"github.com/gogf/gf/g/container/glist"
"github.com/gogf/gf/g/container/gvar"
"github.com/gogf/gf/g/internal/rwmutex"
@ -364,3 +368,8 @@ func (m *ListMap) Merge(other *ListMap) {
return true
})
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (m *ListMap) MarshalJSON() ([]byte, error) {
return json.Marshal(gconv.Map(m.Map()))
}

View File

@ -7,7 +7,9 @@
package gtree
import (
"encoding/json"
"fmt"
"github.com/gogf/gf/g/container/gvar"
"github.com/gogf/gf/g/internal/rwmutex"
)
@ -704,3 +706,8 @@ func output(node *AVLTreeNode, prefix string, isTail bool, str *string) {
output(node.children[0], newPrefix, true, str)
}
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (tree *AVLTree) MarshalJSON() ([]byte, error) {
return json.Marshal(tree.Map())
}

View File

@ -8,10 +8,12 @@ package gtree
import (
"bytes"
"encoding/json"
"fmt"
"strings"
"github.com/gogf/gf/g/container/gvar"
"github.com/gogf/gf/g/internal/rwmutex"
"strings"
)
// BTree holds elements of the B-tree.
@ -845,3 +847,8 @@ func (tree *BTree) deleteChild(node *BTreeNode, index int) {
node.Children[len(node.Children)-1] = nil
node.Children = node.Children[:len(node.Children)-1]
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (tree *BTree) MarshalJSON() ([]byte, error) {
return json.Marshal(tree.Map())
}

View File

@ -7,7 +7,9 @@
package gtree
import (
"encoding/json"
"fmt"
"github.com/gogf/gf/g/container/gvar"
"github.com/gogf/gf/g/internal/rwmutex"
)
@ -833,3 +835,8 @@ func (tree *RedBlackTree) nodeColor(node *RedBlackTreeNode) color {
}
return node.color
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (tree *RedBlackTree) MarshalJSON() ([]byte, error) {
return json.Marshal(tree.Map())
}

View File

@ -8,10 +8,12 @@
package gvar
import (
"encoding/json"
"time"
"github.com/gogf/gf/g/container/gtype"
"github.com/gogf/gf/g/os/gtime"
"github.com/gogf/gf/g/util/gconv"
"time"
)
// Var is an universal variable type.
@ -34,6 +36,11 @@ func New(value interface{}, unsafe ...bool) *Var {
return v
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (v *Var) MarshalJSON() ([]byte, error) {
return json.Marshal(v.Val())
}
// Set sets <value> to <v>, and returns the old value.
func (v *Var) Set(value interface{}) (old interface{}) {
if v.safe {

View File

@ -6,7 +6,9 @@
package gtime
import "time"
import (
"time"
)
type Time struct {
time.Time
@ -175,3 +177,8 @@ func (t *Time) Truncate(d time.Duration) *Time {
t.Time = t.Time.Truncate(d)
return t
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
func (t *Time) MarshalJSON() ([]byte, error) {
return []byte(`"` + t.String() + `"`), nil
}

View File

@ -0,0 +1,24 @@
package main
import (
"encoding/json"
"fmt"
"github.com/gogf/gf/g/container/gmap"
)
func main() {
//m := gmap.New()
//m.Set("k", "v")
//m.Set("1", "2")
//b, err := json.Marshal(m)
//fmt.Println(err)
//fmt.Println(string(b))
m := gmap.NewIntIntMap()
m.Set(1, 2)
m.Set(3, 4)
b, err := json.Marshal(m)
fmt.Println(err)
fmt.Println(string(b))
}

View File

@ -0,0 +1,15 @@
package main
import (
"encoding/json"
"fmt"
"github.com/gogf/gf/g/os/gtime"
)
func main() {
t := gtime.Now()
b, err := json.Marshal(t)
fmt.Println(err)
fmt.Println(string(b))
}