refactor sql_json view endpoint: extract to method reuse code (#16546)

diff --git a/superset/views/core.py b/superset/views/core.py
index 6cc910d..5753a78 100755
--- a/superset/views/core.py
+++ b/superset/views/core.py
@@ -2411,8 +2411,9 @@
                 return json_error_response(f"{msg}", status=400)
             return json_error_response(f"{msg}")
 
-    @staticmethod
-    def _sql_json_async(
+    @classmethod
+    def _sql_json_async(  # pylint: disable=too-many-arguments
+        cls,
         session: Session,
         rendered_query: str,
         query: Query,
@@ -2474,19 +2475,13 @@
         # Update saved query with execution info from the query execution
         QueryDAO.update_saved_query_exec_info(query_id)
 
-        resp = json_success(
-            json.dumps(
-                {"query": query.to_dict()},
-                default=utils.json_int_dttm_ser,
-                ignore_nan=True,
-            ),
-            status=202,
-        )
+        resp = json_success(cls._convert_query_to_payload(query), status=202,)
         session.commit()
         return resp
 
-    @staticmethod
+    @classmethod
     def _sql_json_sync(
+        cls,
         _session: Session,
         rendered_query: str,
         query: Query,
@@ -2723,6 +2718,14 @@
             session, rendered_query, query, expand_data, log_params
         )
 
+    @staticmethod
+    def _convert_query_to_payload(query: Query) -> str:
+        return json.dumps(
+            {"query": query.to_dict()},
+            default=utils.json_int_dttm_ser,
+            ignore_nan=True,
+        )
+
     @classmethod
     def _get_the_query_db(
         cls, execution_context: SqlJsonExecutionContext, session: Session