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; }
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; }