blob: 204fe0e0922aa0582eada026b3ee4af5f7cf25f7 [file] [log] [blame]
khenaidooab1f7bd2019-11-14 14:00:27 -05001package jsoniter
2
3// ReadArray read array element, tells if the array has more element to read.
4func (iter *Iterator) ReadArray() (ret bool) {
5 c := iter.nextToken()
6 switch c {
7 case 'n':
8 iter.skipThreeBytes('u', 'l', 'l')
9 return false // null
10 case '[':
11 c = iter.nextToken()
12 if c != ']' {
13 iter.unreadByte()
14 return true
15 }
16 return false
17 case ']':
18 return false
19 case ',':
20 return true
21 default:
22 iter.ReportError("ReadArray", "expect [ or , or ] or n, but found "+string([]byte{c}))
23 return
24 }
25}
26
27// ReadArrayCB read array with callback
28func (iter *Iterator) ReadArrayCB(callback func(*Iterator) bool) (ret bool) {
29 c := iter.nextToken()
30 if c == '[' {
khenaidood948f772021-08-11 17:49:24 -040031 if !iter.incrementDepth() {
32 return false
33 }
khenaidooab1f7bd2019-11-14 14:00:27 -050034 c = iter.nextToken()
35 if c != ']' {
36 iter.unreadByte()
37 if !callback(iter) {
khenaidood948f772021-08-11 17:49:24 -040038 iter.decrementDepth()
khenaidooab1f7bd2019-11-14 14:00:27 -050039 return false
40 }
41 c = iter.nextToken()
42 for c == ',' {
43 if !callback(iter) {
khenaidood948f772021-08-11 17:49:24 -040044 iter.decrementDepth()
khenaidooab1f7bd2019-11-14 14:00:27 -050045 return false
46 }
47 c = iter.nextToken()
48 }
49 if c != ']' {
50 iter.ReportError("ReadArrayCB", "expect ] in the end, but found "+string([]byte{c}))
khenaidood948f772021-08-11 17:49:24 -040051 iter.decrementDepth()
khenaidooab1f7bd2019-11-14 14:00:27 -050052 return false
53 }
khenaidood948f772021-08-11 17:49:24 -040054 return iter.decrementDepth()
khenaidooab1f7bd2019-11-14 14:00:27 -050055 }
khenaidood948f772021-08-11 17:49:24 -040056 return iter.decrementDepth()
khenaidooab1f7bd2019-11-14 14:00:27 -050057 }
58 if c == 'n' {
59 iter.skipThreeBytes('u', 'l', 'l')
60 return true // null
61 }
62 iter.ReportError("ReadArrayCB", "expect [ or n, but found "+string([]byte{c}))
63 return false
64}