code: func (iter *Iterator) ReadObjectCB(callback func(*Iterator, string) bool) bool {
  	c := iter.nextToken()
  	var field string
  	if c == '{' {
  		c = iter.nextToken()
  		if c == '"' {
  			iter.unreadByte()
  			field = iter.ReadString()
  			c = iter.nextToken()
  			if c != ':' {
  				iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
  			}
  			if !callback(iter, field) {
  				return false
  			}
  			c = iter.nextToken()
  			for c == ',' {
  				field = iter.ReadString()
  				c = iter.nextToken()
  				if c != ':' {
  					iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
  				}
  				if !callback(iter, field) {
  					return false
  				}
  				c = iter.nextToken()
  			}
  			if c != '}' {
  				iter.ReportError("ReadObjectCB", `object not ended with }`)
  				return false
  			}
  			return true
  		}
  		if c == '}' {
  			return true
  		}
  		iter.ReportError("ReadObjectCB", `expect " after }, but found `+string([]byte{c}))
  		return false
  	}
  	if c == 'n' {
  		iter.skipThreeBytes('u', 'l', 'l')
  		return true // null
  	}
  	iter.ReportError("ReadObjectCB", `expect { or n, but found `+string([]byte{c}))
  	return false
  }
docs: // ReadObjectCB read object with callback, the key is ascii only and field name not copied