code: func (iter *Iterator) ReadObject() (ret string) {
  	c := iter.nextToken()
  	switch c {
  	case 'n':
  		iter.skipThreeBytes('u', 'l', 'l')
  		return "" // null
  	case '{':
  		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}))
  			}
  			return field
  		}
  		if c == '}' {
  			return "" // end of object
  		}
  		iter.ReportError("ReadObject", `expect " after {, but found `+string([]byte{c}))
  		return
  	case ',':
  		field := iter.ReadString()
  		c = iter.nextToken()
  		if c != ':' {
  			iter.ReportError("ReadObject", "expect : after object field, but found "+string([]byte{c}))
  		}
  		return field
  	case '}':
  		return "" // end of object
  	default:
  		iter.ReportError("ReadObject", fmt.Sprintf(`expect { or , or } or n, but found %s`, string([]byte{c})))
  		return
  	}
  }
docs: // ReadObject read one field from object.
  // If object ended, returns empty string.
  // Otherwise, returns the field name.