code: def explore_json(self, datasource_type=None, datasource_id=None):
          
          csv = request.args.get('csv') == 'true'
          query = request.args.get('query') == 'true'
          results = request.args.get('results') == 'true'
          samples = request.args.get('samples') == 'true'
          force = request.args.get('force') == 'true'
  
          form_data = get_form_data()[0]
          datasource_id, datasource_type = get_datasource_info(
              datasource_id, datasource_type, form_data)
          viz_obj = get_viz(
              datasource_type=datasource_type,
              datasource_id=datasource_id,
              form_data=form_data,
              force=force,
          )
  
          return self.generate_json(
              viz_obj,
              csv=csv,
              query=query,
              results=results,
              samples=samples,
          )
docs: Serves all request that GET or POST form_data
  
          This endpoint evolved to be the entry point of many different
          requests that GETs or POSTs a form_data.
  
          `self.generate_json` receives this input and returns different
          payloads based on the request args in the first block
  
          TODO: break into one endpoint for each return shape