def process_token(token_type, token):
        if token_type == TOKEN_TYPE.OPERATOR:
            if token == ']':
                return None, None, None
            elif token == ",":
                token_type, token = next(token_stream)
                if token_type == TOKEN_TYPE.OPERATOR:
                    if token == "[" or token == "{":
                        return __parse(token_stream, (token_type, token))
                    else:
                        raise ValueError("Expected an array value.  Got '{}'".format(token))
                else:
                    return token, None, None
            elif token == "[" or token == "{":
                return __parse(token_stream, (token_type, token))
            else:
                raise ValueError("Array entries must be followed by ',' or ']'.  Got '{}'".format(token))
        else:
            return token, None, None