1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package badjson
- import (
- E "github.com/sagernet/sing/common/exceptions"
- "github.com/goccy/go-json"
- )
- func decodeJSON(decoder *json.Decoder) (any, error) {
- rawToken, err := decoder.Token()
- if err != nil {
- return nil, err
- }
- switch token := rawToken.(type) {
- case json.Delim:
- switch token {
- case '{':
- var object JSONObject
- err = object.decodeJSON(decoder)
- if err != nil {
- return nil, err
- } else if rawToken != json.Delim('}') {
- return nil, E.New("excepted object end, but got ", rawToken)
- }
- return object, nil
- case '[':
- var array JSONArray[any]
- err = array.decodeJSON(decoder)
- if err != nil {
- return nil, err
- }
- rawToken, err = decoder.Token()
- if err != nil {
- return nil, err
- } else if rawToken != json.Delim(']') {
- return nil, E.New("excepted array end, but got ", rawToken)
- }
- return &array, nil
- default:
- return nil, E.New("excepted object or array end: ", token)
- }
- }
- return rawToken, nil
- }
|