示例#1
0
  protected final Value decodeJsonObjectLazyFinalParse() {
    char[] array = charArray;

    if (__currentChar == '{') __index++;

    ValueMap map = useValues ? new ValueMapImpl() : new LazyValueMap(lazyChop);
    Value value = new ValueContainer(map);

    objectLoop:
    for (; __index < array.length; __index++) {
      skipWhiteSpace();
      switch (__currentChar) {
        case '"':
          Value key = decodeStringOverlay();
          skipWhiteSpace();

          if (__currentChar != ':') {

            complain("expecting current character to be " + charDescription(__currentChar) + "\n");
          }
          __index++;

          Value item = decodeValueOverlay();

          skipWhiteSpace();

          MapItemValue miv = new MapItemValue(key, item);

          map.add(miv);
      }

      switch (__currentChar) {
        case '}':
          __index++;
          break objectLoop;

        case ',':
          continue;

        default:
          complain("expecting '}' or ',' but got current char " + charDescription(__currentChar));
      }
    }
    return value;
  }
示例#2
0
  private Value decodeJsonObjectLax() {

    if (__currentChar == '{') this.nextChar();

    ValueMap map = useValues ? new ValueMapImpl() : new LazyValueMap(lazyChop);
    Value value = new ValueContainer(map);

    skipWhiteSpaceIfNeeded();
    int startIndexOfKey = __index;
    Value key;
    MapItemValue miv;
    Value item;

    done:
    for (; __index < this.charArray.length; __index++) {

      skipWhiteSpaceIfNeeded();

      switch (__currentChar) {
        case '/': /* */ //
          handleComment();
          startIndexOfKey = __index;
          break;

        case '#':
          handleBashComment();
          startIndexOfKey = __index;
          break;

        case '=':
          char startChar = charArray[startIndexOfKey];
          if (startChar == ';') {
            startIndexOfKey++;
          }

          key = extractLaxString(startIndexOfKey, __index - 1, false, false);
          __index++; // skip :

          item = decodeValuePlist();
          skipWhiteSpaceIfNeeded();

          miv = new MapItemValue(key, item);

          map.add(miv);

          startIndexOfKey = __index;
          if (__currentChar == '}') {
            __index++;
            break done;
          }

          break;

        case '"':
          key = decodeStringPlist();

          skipWhiteSpaceIfNeeded();

          if (__currentChar != '=') {

            complain(
                "expecting current character to be '='  but got "
                    + charDescription(__currentChar)
                    + "\n");
          }
          __index++;
          item = decodeValuePlist();

          skipWhiteSpaceIfNeeded();
          miv = new MapItemValue(key, item);

          map.add(miv);

          startIndexOfKey = __index;
          if (__currentChar == '}') {
            __index++;
            if (hasMore()) {
              if (charArray[__index] == ';') {
                __index++;
              }
            }
            break done;
          }

          break;

        case '}':
          __index++;
          if (hasMore()) {
            if (charArray[__index] == ';') {
              __index++;
            }
          }
          break done;
      }
    }

    return value;
  }