1
0
mirror of https://github.com/json-iterator/go.git synced 2024-11-24 08:22:14 +02:00

next token

This commit is contained in:
Tao Wen 2016-12-06 20:09:19 +08:00
parent e5f5c5716b
commit c5576a8a31

View File

@ -88,6 +88,23 @@ func (iter *Iterator) skipWhitespaces() {
}
}
func (iter *Iterator) nextToken() byte {
for {
for i := iter.head; i < iter.tail; i++ {
c := iter.buf[i]
switch c {
case ' ', '\n', '\t', 'r':
continue
}
iter.head = i+1
return c
}
if !iter.loadMore() {
return 0
}
}
}
func (iter *Iterator) ReportError(operation string, msg string) {
if iter.Error != nil {
return
@ -483,8 +500,7 @@ func appendRune(p []byte, r rune) []byte {
}
func (iter *Iterator) ReadArray() (ret bool) {
iter.skipWhitespaces()
c := iter.readByte()
c := iter.nextToken()
if iter.Error != nil {
return
}
@ -494,8 +510,7 @@ func (iter *Iterator) ReadArray() (ret bool) {
return false // null
}
case '[': {
iter.skipWhitespaces()
c = iter.readByte()
c = iter.nextToken()
if iter.Error != nil {
return
}
@ -517,8 +532,7 @@ func (iter *Iterator) ReadArray() (ret bool) {
}
func (iter *Iterator) ReadArrayCB(cb func()) {
iter.skipWhitespaces()
c := iter.readByte()
c := iter.nextToken()
if c == 'n' {
iter.skipNull()
return // null
@ -527,8 +541,7 @@ func (iter *Iterator) ReadArrayCB(cb func()) {
iter.ReportError("ReadArray", "expect [ or n")
return
}
iter.skipWhitespaces()
c = iter.readByte()
c = iter.nextToken()
if c == ']' {
return // []
} else {
@ -539,8 +552,7 @@ func (iter *Iterator) ReadArrayCB(cb func()) {
return
}
cb()
iter.skipWhitespaces()
c = iter.readByte()
c = iter.nextToken()
if c == ']' {
return
}
@ -553,8 +565,7 @@ func (iter *Iterator) ReadArrayCB(cb func()) {
}
func (iter *Iterator) ReadObject() (ret string) {
iter.skipWhitespaces()
c := iter.readByte()
c := iter.nextToken()
if iter.Error != nil {
return
}
@ -567,8 +578,7 @@ func (iter *Iterator) ReadObject() (ret string) {
return "" // null
}
case '{': {
iter.skipWhitespaces()
c = iter.readByte()
c = iter.nextToken()
if iter.Error != nil {
return
}
@ -600,8 +610,7 @@ func (iter *Iterator) readObjectField() (ret string) {
if iter.Error != nil {
return
}
iter.skipWhitespaces()
c := iter.readByte()
c := iter.nextToken()
if iter.Error != nil {
return
}
@ -803,8 +812,7 @@ func (iter *Iterator) skipNumber() {
func (iter *Iterator) skipArray() {
for {
iter.skipWhitespaces()
c := iter.readByte()
c := iter.nextToken()
if iter.Error != nil {
return
}
@ -813,8 +821,7 @@ func (iter *Iterator) skipArray() {
}
iter.unreadByte()
iter.Skip()
iter.skipWhitespaces()
c = iter.readByte()
c = iter.nextToken()
switch c {
case ',':
iter.skipWhitespaces()
@ -829,8 +836,7 @@ func (iter *Iterator) skipArray() {
}
func (iter *Iterator) skipObject() {
iter.skipWhitespaces()
c := iter.readByte()
c := iter.nextToken()
if iter.Error != nil {
return
}
@ -840,23 +846,20 @@ func (iter *Iterator) skipObject() {
iter.unreadByte()
}
for {
iter.skipWhitespaces()
c := iter.readByte()
c = iter.nextToken()
if c != '"' {
iter.ReportError("skipObject", `expects "`)
return
}
iter.skipString()
iter.skipWhitespaces()
c = iter.readByte()
c = iter.nextToken()
if c != ':' {
iter.ReportError("skipObject", `expects :`)
return
}
iter.skipWhitespaces()
iter.Skip()
iter.skipWhitespaces()
c = iter.readByte()
c = iter.nextToken()
switch c {
case ',':
iter.skipWhitespaces()