'Decodes column source data encoded as lists or base64 strings.'

def from_json(self, json, models=None):

    if (json is None):
        return None
    elif (not isinstance(json, dict)):
        raise DeserializationError(('%s    expected    a    dict    or    None,    got    %s' % (self, json)))
    new_data = {}
    for (key, value) in json.items():
        key = self.keys_type.from_json(key, models)
        if (isinstance(value, dict) and ('__ndarray__' in value)):
            new_data[key] = decode_base64_dict(value)
        elif (isinstance(value, list) and any(((isinstance(el, dict) and ('__ndarray__' in el)) for el in value))):
            new_list = []
            for el in value:
                if (isinstance(el, dict) and ('__ndarray__' in el)):
                    el = decode_base64_dict(el)
                elif isinstance(el, list):
                    el = self.values_type.from_json(el)
                new_list.append(el)
            new_data[key] = new_list
        else:
            new_data[key] = self.values_type.from_json(value, models)
    return new_data
