code: function parseObject () {
    if (tokenType === TOKENTYPE.DELIMITER && token === '{') {
      getToken();
  
      let key;
      let object = {};
  
      if (tokenType === TOKENTYPE.DELIMITER && token === '}') {
        // empty object
        getToken();
        return object;
      }
  
      // add this object to the stack
      const stackIndex = stack.length;
      stack[stackIndex] = object;
  
      while (true) {
        // parse key
        if (tokenType !== TOKENTYPE.STRING) {
          throw createSyntaxError('Object key expected');
        }
        key = token;
        getToken();
  
        // parse key/value separator
        if (tokenType !== TOKENTYPE.DELIMITER || token !== ':') {
          throw createSyntaxError('Colon expected');
        }
        getToken();
  
        // parse value
        path[stackIndex] = key;
        object[key] = parseObject();
  
        // parse key/value pair separator
        if (tokenType !== TOKENTYPE.DELIMITER || token !== ',') {
          break;
        }
        getToken();
      }
  
      if (tokenType !== TOKENTYPE.DELIMITER || token !== '}') {
        throw createSyntaxError('Comma or end of object "}" expected');
      }
      getToken();
  
      // check whether this is a circular reference
      if (isCircular(object)) {
        return parseCircular(object);
      }
  
      // remove current entry from the stack
      stack.length = stackIndex;
      path.length = stackIndex;
  
      return object;
    }
  
    return parseArray();
  }
docs: Parse an object like '{"key": "value"}'
  @return {*}