Tarun Koyalwar c1bd4f82ea
Multiple bug fixes in query param fuzzing (#4925)
* fuzz: check and handle typed slice

* do not query encode params + fuzz/allow duplicates params

* sometimes order matters ~query params

* component: fix broken iterator

* result upload add meta params
2024-03-25 10:08:26 +05:30

49 lines
1.0 KiB
Go

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
}