1 //+build jsoniter_sloppy
5 // sloppy but faster implementation, do not validate the input json
7 func (iter *Iterator) skipNumber() {
9 for i := iter.head; i < iter.tail; i++ {
12 case ' ', '\n', '\r', '\t', ',', '}', ']':
23 func (iter *Iterator) skipArray() {
26 for i := iter.head; i < iter.tail; i++ {
28 case '"': // If inside string, skip it
31 i = iter.head - 1 // it will be i++ soon
32 case '[': // If open symbol, increase level
34 case ']': // If close symbol, increase level
37 // If we have returned to the original level, we're done
45 iter.ReportError("skipObject", "incomplete array")
51 func (iter *Iterator) skipObject() {
54 for i := iter.head; i < iter.tail; i++ {
56 case '"': // If inside string, skip it
59 i = iter.head - 1 // it will be i++ soon
60 case '{': // If open symbol, increase level
62 case '}': // If close symbol, increase level
65 // If we have returned to the original level, we're done
73 iter.ReportError("skipObject", "incomplete object")
79 func (iter *Iterator) skipString() {
81 end, escaped := iter.findStringEnd()
84 iter.ReportError("skipString", "incomplete string")
88 iter.head = 1 // skip the first char as last char read is \
97 // adapted from: https://github.com/buger/jsonparser/blob/master/parser.go
98 // Tries to find the end of string
99 // Support if string contains escaped quote symbols.
100 func (iter *Iterator) findStringEnd() (int, bool) {
102 for i := iter.head; i < iter.tail; i++ {
110 if j < iter.head || iter.buf[j] != '\\' {
111 // even number of backslashes
112 // either end of buffer, or " found
116 if j < iter.head || iter.buf[j] != '\\' {
117 // odd number of backslashes
123 } else if c == '\\' {
129 if j < iter.head || iter.buf[j] != '\\' {
130 // even number of backslashes
131 // either end of buffer, or " found
132 return -1, false // do not end with \
135 if j < iter.head || iter.buf[j] != '\\' {
136 // odd number of backslashes
143 return -1, true // end with \