public Json close() {

        //don't "close" the root JSON wrapping (array or object) because it just 
        //introduces more state handling requirements
        if (json.length() - position == 0) {
            return this;
        }

        //"close" by moving forward past the current container closing
        position++;
//        containerFirst = false;

        //what kind of container is this currently?
        if (json.charAt(position) == '}') {
            container = JsonContainer.OBJECT;
        } else if (charAt(position) == ']') {
            container = JsonContainer.ARRAY;
        } else {
            throw new RuntimeException("Unexpected JSON state");
        }

        return this;
    }