mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-18 16:55:25 +00:00
* 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
49 lines
1.0 KiB
Go
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
|
|
}
|