anchor.diff:        case 'u':
           int remainingLength = _json.length - _index;
           if (remainingLength >= 4) {
  -          var hexString = _json.substring(_index, _index + 4);
  -          _index += 4;
  +          var hexString = _consumeCharacters(4);
             var hexInt = int.parse(hexString, radix: 16);
             return UTF8.decode([hexInt]);
           }
  
positive.code:         case ValueType.END_ARRAY:
          case ValueType.NAME_SEPARATOR:
          case ValueType.VALUE_SEPARATOR:
            value = character;
            _index++;
            break;
          default:
            throw new LexerException("Syntax Error: Unexpected token $character");
  
negative.code:   String _parseNumber() {
      String number = "";
  
      while(_numberCharacters.contains(_peekCharacter())) {
        number += _consumeCharacter();
  //      if (_index == _json.length) {
  //        break;
  //      }
      }
      return number;
    }
  
    String _parseString() {
      _consumeCharacter(); //We don't care about the starting quotation mark
      String string = "";
      String character = _consumeCharacter();
      while (character != '"') {
        if (character == r"\") {
          string += _parseEscapedStringFragment();
        } else {
          string += character;
        }
        if (_index == _json.length) {
          throw new LexerException("Invalid json fragment encountered: $string");
        }
        character = _consumeCharacter();
      }
      return string;
    }
  
    String _parseEscapedStringFragment() {
      String character = _consumeCharacter();
      switch (character) {
        case '"':
        case r'\':
  