docs: def read_json(self, file_name=None, input_json=None, imported_data=pd.DataFrame()):
          """ Read input json file.
  
          Notes
          -----
          The input json file should include ALL parameters.
  
          Parameters
          ----------
          file_name   : str
              Filename to be read.
          input_json  : dict
              JSON object to be read.
          imported_data   : pd.DataFrame()
              Pandas Dataframe containing data.
  
          """
  
          if not file_name and not input_json or file_name and input_json:
              raise TypeError('Provide either json file or json object to read.')
          
          # Read json file
          if file_name:
              if not isinstance(file_name, str) or not file_name.endswith('.json') or not os.path.isfile('./'+file_name):
                  raise TypeError('File name should be a valid .json file residing in current directory.')
              else:
                  f = open(file_name)
                  input_json = json.load(f)
  
          if imported_data.empty:
              import_json = input_json['Import']
              imported_data = self.import_data(file_name=import_json['File Name'], folder_name=import_json['Folder Name'],
                                              head_row=import_json['Head Row'], index_col=import_json['Index Col'],
                                              convert_col=import_json['Convert Col'], concat_files=import_json['Concat Files'],
                                              save_file=import_json['Save File'])
  
          clean_json = input_json['Clean']
          cleaned_data = self.clean_data(imported_data, rename_col=clean_json['Rename Col'], drop_col=clean_json['Drop Col'],
                                          resample=clean_json['Resample'], freq=clean_json['Frequency'], resampler=clean_json['Resampler'],
                                          interpolate=clean_json['Interpolate'], limit=clean_json['Limit'],
                                          method=clean_json['Method'], remove_na=clean_json['Remove NA'],
                                          remove_na_how=clean_json['Remove NA How'], remove_outliers=clean_json['Remove Outliers'],
                                          sd_val=clean_json['SD Val'], remove_out_of_bounds=clean_json['Remove Out of Bounds'],
                                          low_bound=clean_json['Low Bound'], high_bound=clean_json['High Bound'],
                                          save_file=clean_json['Save File'])
  
          preproc_json = input_json['Preprocess']
          preprocessed_data = self.preprocess_data(cleaned_data, cdh_cpoint=preproc_json['CDH CPoint'],
                                                  hdh_cpoint=preproc_json['HDH CPoint'], col_hdh_cdh=preproc_json['HDH CDH Calc Col'],
                                                  col_degree=preproc_json['Col Degree'], degree=preproc_json['Degree'],
                                                  standardize=preproc_json['Standardize'], normalize=preproc_json['Normalize'],
                                                  year=preproc_json['Year'], month=preproc_json['Month'], week=preproc_json['Week'],
                                                  tod=preproc_json['Time of Day'], dow=preproc_json['Day of Week'],
                                                  save_file=preproc_json['Save File'])
  
          model_json = input_json['Model']
          model_data = self.model(preprocessed_data, ind_col=model_json['Independent Col'], dep_col=model_json['Dependent Col'],
                                  project_ind_col=model_json['Projection Independent Col'],
                                  baseline_period=model_json['Baseline Period'], projection_period=model_json['Projection Period'],
                                  exclude_time_period=model_json['Exclude Time Period'],
                                  alphas=model_json['Alphas'], cv=model_json['CV'], plot=model_json['Plot'], figsize=model_json['Fig Size'])