-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
json.go
48 lines (39 loc) · 1.05 KB
/
json.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package dataformat
import (
"strings"
jsoniter "github.com/json-iterator/go"
)
// JSON is a JSON encoder
//
// For now JSON only supports objects as the root data type
// and not arrays
//
// TODO: Support arrays + other JSON oddities by
// adding more attirbutes to the map[string]interface{}
type JSON struct{}
var (
_ DataFormat = &JSON{}
)
// NewJSON returns a new JSON encoder
func NewJSON() *JSON {
return &JSON{}
}
// IsType returns true if the data is JSON encoded
func (j *JSON) IsType(data string) bool {
return strings.HasPrefix(data, "{") && strings.HasSuffix(data, "}")
}
// Encode encodes the data into JSON format
func (j *JSON) Encode(data KV) (string, error) {
encoded, err := jsoniter.Marshal(data.Map)
return string(encoded), err
}
// Decode decodes the data from JSON format
func (j *JSON) Decode(data string) (KV, error) {
var decoded map[string]interface{}
err := jsoniter.Unmarshal([]byte(data), &decoded)
return KVMap(decoded), err
}
// Name returns the name of the encoder
func (j *JSON) Name() string {
return JSONDataFormat
}