feature_iter_array.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package jsoniter
  2. // ReadArray read array element, tells if the array has more element to read.
  3. func (iter *Iterator) ReadArray() (ret bool) {
  4. c := iter.nextToken()
  5. switch c {
  6. case 'n':
  7. iter.skipFixedBytes(3)
  8. return false // null
  9. case '[':
  10. c = iter.nextToken()
  11. if c != ']' {
  12. iter.unreadByte()
  13. return true
  14. }
  15. return false
  16. case ']':
  17. return false
  18. case ',':
  19. return true
  20. default:
  21. iter.ReportError("ReadArray", "expect [ or , or ] or n, but found: "+string([]byte{c}))
  22. return
  23. }
  24. }
  25. // ReadArrayCB read array with callback
  26. func (iter *Iterator) ReadArrayCB(callback func(*Iterator) bool) (ret bool) {
  27. c := iter.nextToken()
  28. if c == '[' {
  29. c = iter.nextToken()
  30. if c != ']' {
  31. iter.unreadByte()
  32. if !callback(iter) {
  33. return false
  34. }
  35. for iter.nextToken() == ',' {
  36. if !callback(iter) {
  37. return false
  38. }
  39. }
  40. return true
  41. }
  42. return true
  43. }
  44. if c == 'n' {
  45. iter.skipFixedBytes(3)
  46. return true // null
  47. }
  48. iter.ReportError("ReadArrayCB", "expect [ or n, but found: "+string([]byte{c}))
  49. return false
  50. }