iter_array.go (1402B)
1 package jsoniter 2 3 // ReadArray read array element, tells if the array has more element to read. 4 func (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 28 func (iter *Iterator) ReadArrayCB(callback func(*Iterator) bool) (ret bool) { 29 c := iter.nextToken() 30 if c == '[' { 31 if !iter.incrementDepth() { 32 return false 33 } 34 c = iter.nextToken() 35 if c != ']' { 36 iter.unreadByte() 37 if !callback(iter) { 38 iter.decrementDepth() 39 return false 40 } 41 c = iter.nextToken() 42 for c == ',' { 43 if !callback(iter) { 44 iter.decrementDepth() 45 return false 46 } 47 c = iter.nextToken() 48 } 49 if c != ']' { 50 iter.ReportError("ReadArrayCB", "expect ] in the end, but found "+string([]byte{c})) 51 iter.decrementDepth() 52 return false 53 } 54 return iter.decrementDepth() 55 } 56 return iter.decrementDepth() 57 } 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 }