.github
alerting
client
config
core
docs
example
jsonpath
k8s
metric
pattern
security
static
vendor
cloud.google.com
github.com
beorn7
cespare
davecgh
gogo
golang
google
googleapis
imdario
json-iterator
go
.codecov.yml
.gitignore
.travis.yml
Gopkg.lock
Gopkg.toml
LICENSE
README.md
adapter.go
any.go
any_array.go
any_bool.go
any_float.go
any_int32.go
any_int64.go
any_invalid.go
any_nil.go
any_number.go
any_object.go
any_str.go
any_uint32.go
any_uint64.go
build.sh
config.go
fuzzy_mode_convert_table.md
go.mod
go.sum
iter.go
iter_array.go
iter_float.go
iter_int.go
iter_object.go
iter_skip.go
iter_skip_sloppy.go
iter_skip_strict.go
iter_str.go
jsoniter.go
pool.go
reflect.go
reflect_array.go
reflect_dynamic.go
reflect_extension.go
reflect_json_number.go
reflect_json_raw_message.go
reflect_map.go
reflect_marshaler.go
reflect_native.go
reflect_optional.go
reflect_slice.go
reflect_struct_decoder.go
reflect_struct_encoder.go
stream.go
stream_float.go
stream_int.go
stream_str.go
test.sh
matttproud
modern-go
prometheus
spf13
golang.org
google.golang.org
gopkg.in
k8s.io
sigs.k8s.io
modules.txt
watchdog
.dockerignore
.gitattributes
.gitignore
Dockerfile
LICENSE.md
README.md
config.yaml
go.mod
go.sum
gzip.go
main.go
100 lines
2.0 KiB
Go
100 lines
2.0 KiB
Go
//+build !jsoniter_sloppy
|
|
|
|
package jsoniter
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
func (iter *Iterator) skipNumber() {
|
|
if !iter.trySkipNumber() {
|
|
iter.unreadByte()
|
|
if iter.Error != nil && iter.Error != io.EOF {
|
|
return
|
|
}
|
|
iter.ReadFloat64()
|
|
if iter.Error != nil && iter.Error != io.EOF {
|
|
iter.Error = nil
|
|
iter.ReadBigFloat()
|
|
}
|
|
}
|
|
}
|
|
|
|
func (iter *Iterator) trySkipNumber() bool {
|
|
dotFound := false
|
|
for i := iter.head; i < iter.tail; i++ {
|
|
c := iter.buf[i]
|
|
switch c {
|
|
case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
|
|
case '.':
|
|
if dotFound {
|
|
iter.ReportError("validateNumber", `more than one dot found in number`)
|
|
return true // already failed
|
|
}
|
|
if i+1 == iter.tail {
|
|
return false
|
|
}
|
|
c = iter.buf[i+1]
|
|
switch c {
|
|
case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
|
|
default:
|
|
iter.ReportError("validateNumber", `missing digit after dot`)
|
|
return true // already failed
|
|
}
|
|
dotFound = true
|
|
default:
|
|
switch c {
|
|
case ',', ']', '}', ' ', '\t', '\n', '\r':
|
|
if iter.head == i {
|
|
return false // if - without following digits
|
|
}
|
|
iter.head = i
|
|
return true // must be valid
|
|
}
|
|
return false // may be invalid
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (iter *Iterator) skipString() {
|
|
if !iter.trySkipString() {
|
|
iter.unreadByte()
|
|
iter.ReadString()
|
|
}
|
|
}
|
|
|
|
func (iter *Iterator) trySkipString() bool {
|
|
for i := iter.head; i < iter.tail; i++ {
|
|
c := iter.buf[i]
|
|
if c == '"' {
|
|
iter.head = i + 1
|
|
return true // valid
|
|
} else if c == '\\' {
|
|
return false
|
|
} else if c < ' ' {
|
|
iter.ReportError("trySkipString",
|
|
fmt.Sprintf(`invalid control character found: %d`, c))
|
|
return true // already failed
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (iter *Iterator) skipObject() {
|
|
iter.unreadByte()
|
|
iter.ReadObjectCB(func(iter *Iterator, field string) bool {
|
|
iter.Skip()
|
|
return true
|
|
})
|
|
}
|
|
|
|
func (iter *Iterator) skipArray() {
|
|
iter.unreadByte()
|
|
iter.ReadArrayCB(func(iter *Iterator) bool {
|
|
iter.Skip()
|
|
return true
|
|
})
|
|
}
|