'Validate the values in the json dict (validated by xblock fields from_json method)
If all fields validate, go ahead and update those values on the object and return it without
persisting it to the DB.
If not, return the error objects list.
Returns:
did_validate: whether values pass validation or not
errors: list of error objects
result: the updated course metadata or None if error'

@classmethod
def validate_and_update_from_json(cls, descriptor, jsondict, user, filter_tabs=True):

    filtered_list = cls.filtered_list()
    if (not filter_tabs):
        filtered_list.remove('tabs')
    filtered_dict = dict(((k, v) for (k, v) in jsondict.iteritems() if (k not in filtered_list)))
    did_validate = True
    errors = []
    key_values = {}
    updated_data = None
    for (key, model) in filtered_dict.iteritems():
        try:
            val = model['value']
            if (hasattr(descriptor, key) and (getattr(descriptor, key) != val)):
                key_values[key] = descriptor.fields[key].from_json(val)
        except (TypeError, ValueError) as err:
            did_validate = False
            errors.append({'message': err.message, 'model': model})
    if did_validate:
        updated_data = cls.update_from_dict(key_values, descriptor, user, save=False)
    return (did_validate, errors, updated_data)
