Remove go-json
This commit is contained in:
@@ -2,6 +2,7 @@ package badjson
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"reflect"
|
||||
|
||||
"github.com/sagernet/sing-box/common/json"
|
||||
E "github.com/sagernet/sing/common/exceptions"
|
||||
@@ -36,11 +37,15 @@ func (a *JSONArray[T]) UnmarshalJSON(content []byte) error {
|
||||
|
||||
func (a *JSONArray[T]) decodeJSON(decoder *json.Decoder) error {
|
||||
for decoder.More() {
|
||||
var item T
|
||||
err := decoder.Decode(&item)
|
||||
value, err := decodeJSON(decoder)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
item, ok := value.(T)
|
||||
if !ok {
|
||||
var defValue T
|
||||
return E.New("can't cast ", value, " to ", reflect.TypeOf(defValue))
|
||||
}
|
||||
*a = append(*a, item)
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -49,7 +49,7 @@ func (m *JSONObject) UnmarshalJSON(content []byte) error {
|
||||
}
|
||||
err = m.decodeJSON(decoder)
|
||||
if err != nil {
|
||||
return err
|
||||
return E.Cause(err, "decode json object content")
|
||||
}
|
||||
objectEnd, err := decoder.Token()
|
||||
if err != nil {
|
||||
@@ -63,14 +63,15 @@ func (m *JSONObject) UnmarshalJSON(content []byte) error {
|
||||
func (m *JSONObject) decodeJSON(decoder *json.Decoder) error {
|
||||
for decoder.More() {
|
||||
var entryKey string
|
||||
err := decoder.Decode(&entryKey)
|
||||
keyToken, err := decoder.Token()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
entryKey = keyToken.(string)
|
||||
var entryValue any
|
||||
entryValue, err = decodeJSON(decoder)
|
||||
if err != nil {
|
||||
return err
|
||||
return E.Cause(err, "decode value for ", entryKey)
|
||||
}
|
||||
m.Put(entryKey, entryValue)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user