68 lines
1.1 KiB
Go
68 lines
1.1 KiB
Go
package json
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
)
|
|
|
|
type RawMessage = json.RawMessage
|
|
type Object map[string]RawMessage
|
|
type Array []RawMessage
|
|
|
|
var Compact = json.Compact
|
|
var Marshal = json.Marshal
|
|
var MarshalIndent = json.MarshalIndent
|
|
var Valid = json.Valid
|
|
var Unmarshal = json.Unmarshal
|
|
|
|
var (
|
|
beginArray = byte('[')
|
|
beginObject = byte('{')
|
|
beginString = byte('"')
|
|
null = RawMessage(`null`)
|
|
)
|
|
|
|
func IsNull(in RawMessage) bool {
|
|
return bytes.Equal(in, null)
|
|
}
|
|
|
|
func IsArray(in RawMessage) bool {
|
|
if len(in) == 0 {
|
|
return false
|
|
}
|
|
return in[0] == beginArray
|
|
}
|
|
|
|
func IsMap(in RawMessage) bool {
|
|
if len(in) == 0 {
|
|
return false
|
|
}
|
|
return in[0] == beginObject
|
|
}
|
|
|
|
func IsString(in RawMessage) bool {
|
|
if len(in) == 0 {
|
|
return false
|
|
}
|
|
return in[0] == beginString
|
|
}
|
|
|
|
func IsScalar(in RawMessage) bool {
|
|
return !IsArray(in) && !IsMap(in) && !IsNull(in)
|
|
}
|
|
|
|
func MakeArray(in RawMessage) RawMessage {
|
|
if len(in) == 0 {
|
|
return json.RawMessage(`[]`)
|
|
}
|
|
|
|
if IsArray(in) {
|
|
return in
|
|
}
|
|
|
|
return bytes.Join([][]byte{
|
|
[]byte(`[`),
|
|
in,
|
|
[]byte(`]`),
|
|
}, nil)
|
|
}
|