blob: 204fe0e0922aa0582eada026b3ee4af5f7cf25f7 [file] [log] [blame]
Zack Williamse940c7a2019-08-21 14:25:39 -07001package 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 == '[' {
David K. Bainbridgebd6b2882021-08-26 13:31:02 +000031 if !iter.incrementDepth() {
32 return false
33 }
Zack Williamse940c7a2019-08-21 14:25:39 -070034 c = iter.nextToken()
35 if c != ']' {
36 iter.unreadByte()
37 if !callback(iter) {
David K. Bainbridgebd6b2882021-08-26 13:31:02 +000038 iter.decrementDepth()
Zack Williamse940c7a2019-08-21 14:25:39 -070039 return false
40 }
41 c = iter.nextToken()
42 for c == ',' {
43 if !callback(iter) {
David K. Bainbridgebd6b2882021-08-26 13:31:02 +000044 iter.decrementDepth()
Zack Williamse940c7a2019-08-21 14:25:39 -070045 return false
46 }
47 c = iter.nextToken()
48 }
49 if c != ']' {
50 iter.ReportError("ReadArrayCB", "expect ] in the end, but found "+string([]byte{c}))
David K. Bainbridgebd6b2882021-08-26 13:31:02 +000051 iter.decrementDepth()
Zack Williamse940c7a2019-08-21 14:25:39 -070052 return false
53 }
David K. Bainbridgebd6b2882021-08-26 13:31:02 +000054 return iter.decrementDepth()
Zack Williamse940c7a2019-08-21 14:25:39 -070055 }
David K. Bainbridgebd6b2882021-08-26 13:31:02 +000056 return iter.decrementDepth()
Zack Williamse940c7a2019-08-21 14:25:39 -070057 }
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}