<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def load_data(self, filename, *args, **kwargs):
 """ Load JSON data. :param filename: name of JSON file with data :type filename: str :return: data :rtype: dict """

        # append .json extension if needed
        if not filename.endswith('.json'):
            filename += '.json'  # append "json" to filename
        # open file and load JSON data
        with open(filename, 'r') as fid:
            json_data = json.load(fid)
        # if JSONReader is the original reader then apply units and return
        if (not self.orig_data_reader or
                isinstance(self, self.orig_data_reader)):
            return self.apply_units_to_cache(json_data['data'])
        # last modification since JSON file was saved
        utc_mod_time = json_data.get('utc_mod_time')
        # instance of original data reader with original parameters
        orig_data_reader_obj = self.orig_data_reader(self.parameters, self.meta)
        # check if file has been modified since saved as JSON file
        if utc_mod_time:
            # convert to ordered tuple
            utc_mod_time = time.struct_time(utc_mod_time)
            orig_filename = filename[:-5]  # original filename
            # use original file if it's been modified since JSON file saved
            if utc_mod_time < time.gmtime(os.path.getmtime(orig_filename)):
                os.remove(filename)  # delete JSON file
                return orig_data_reader_obj.load_data(orig_filename)
        # use JSON file if original file hasn't been modified
        return orig_data_reader_obj.apply_units_to_cache(json_data['data'])