diff --git a/.rubocop_todo/gitlab/json.yml b/.rubocop_todo/gitlab/json.yml
index ec48c04f3edef98c0391dffef2bc83a4a404cd45..92f679bd11a29d51b03cb6f663df192b7f8f4ee8 100644
--- a/.rubocop_todo/gitlab/json.yml
+++ b/.rubocop_todo/gitlab/json.yml
@@ -18,31 +18,6 @@ Gitlab/Json:
     - 'app/controllers/projects/templates_controller.rb'
     - 'app/controllers/projects_controller.rb'
     - 'app/controllers/search_controller.rb'
-    - 'app/helpers/access_tokens_helper.rb'
-    - 'app/helpers/application_settings_helper.rb'
-    - 'app/helpers/breadcrumbs_helper.rb'
-    - 'app/helpers/ci/builds_helper.rb'
-    - 'app/helpers/ci/pipelines_helper.rb'
-    - 'app/helpers/compare_helper.rb'
-    - 'app/helpers/emails_helper.rb'
-    - 'app/helpers/environment_helper.rb'
-    - 'app/helpers/groups_helper.rb'
-    - 'app/helpers/ide_helper.rb'
-    - 'app/helpers/integrations_helper.rb'
-    - 'app/helpers/invite_members_helper.rb'
-    - 'app/helpers/issuables_description_templates_helper.rb'
-    - 'app/helpers/issuables_helper.rb'
-    - 'app/helpers/jira_connect_helper.rb'
-    - 'app/helpers/learn_gitlab_helper.rb'
-    - 'app/helpers/namespaces_helper.rb'
-    - 'app/helpers/notes_helper.rb'
-    - 'app/helpers/operations_helper.rb'
-    - 'app/helpers/packages_helper.rb'
-    - 'app/helpers/projects/project_members_helper.rb'
-    - 'app/helpers/projects_helper.rb'
-    - 'app/helpers/search_helper.rb'
-    - 'app/helpers/terms_helper.rb'
-    - 'app/helpers/users_helper.rb'
     - 'app/mailers/emails/members.rb'
     - 'app/models/concerns/redis_cacheable.rb'
     - 'app/models/diff_discussion.rb'
diff --git a/app/helpers/access_tokens_helper.rb b/app/helpers/access_tokens_helper.rb
index 44200e84afb091f55993b29f3651872bc1346854..07e61b7f552e7c00927c32c233a67e7189bfd791 100644
--- a/app/helpers/access_tokens_helper.rb
+++ b/app/helpers/access_tokens_helper.rb
@@ -9,7 +9,7 @@ def scope_description(prefix)
   end
 
   def tokens_app_data
-    {
+    data = {
       feed_token: {
         enabled: !Gitlab::CurrentSettings.disable_feed_token,
         token: current_user.feed_token,
@@ -25,7 +25,9 @@ def tokens_app_data
         token: current_user.enabled_static_object_token,
         reset_path: reset_static_object_token_profile_path
       }
-    }.to_json
+    }
+
+    Gitlab::Json.dump(data)
   end
 
   def expires_at_field_data
diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb
index 3719676497445fca4ff29605bca344c77e156deb..ea07e3697a378b41cad8dbb648ba439c277e8847 100644
--- a/app/helpers/application_settings_helper.rb
+++ b/app/helpers/application_settings_helper.rb
@@ -137,7 +137,7 @@ def repository_storages_options_json
       }
     end
 
-    options.to_json
+    Gitlab::Json.dump(options)
   end
 
   def external_authorization_description
diff --git a/app/helpers/breadcrumbs_helper.rb b/app/helpers/breadcrumbs_helper.rb
index 38ed6e95a449a08ff5233fec4f1dcfbaa35bb8f2..a14bc8e00bf7a0f5a6495705ceade5a77ba318d7 100644
--- a/app/helpers/breadcrumbs_helper.rb
+++ b/app/helpers/breadcrumbs_helper.rb
@@ -40,11 +40,11 @@ def push_to_schema_breadcrumb(text, link)
   end
 
   def schema_breadcrumb_json
-    {
+    Gitlab::Json.dump({
       '@context': 'https://schema.org',
       '@type': 'BreadcrumbList',
       'itemListElement': build_item_list_elements
-    }.to_json
+    })
   end
 
   private
diff --git a/app/helpers/ci/builds_helper.rb b/app/helpers/ci/builds_helper.rb
index afd0af18ba7f3b96684e750b2685ffd24a5cd83e..265969a6370cf039b75b102d4e3fde7dd78ecee0 100644
--- a/app/helpers/ci/builds_helper.rb
+++ b/app/helpers/ci/builds_helper.rb
@@ -38,13 +38,13 @@ def build_failed_issue_options
     end
 
     def prepare_failed_jobs_summary_data(failed_builds)
-      failed_builds.map do |build|
+      Gitlab::Json.dump(failed_builds.map do |build|
         {
           id: build.id,
           failure: build.present.callout_failure_message,
           failure_summary: build_summary(build)
         }
-      end.to_json
+      end)
     end
   end
 end
diff --git a/app/helpers/ci/pipelines_helper.rb b/app/helpers/ci/pipelines_helper.rb
index c93c8dd8d7659ca5d9a73110c4649a42d5bad692..80632f2ea10335d465d0de73e683b87854832842 100644
--- a/app/helpers/ci/pipelines_helper.rb
+++ b/app/helpers/ci/pipelines_helper.rb
@@ -87,7 +87,7 @@ def pipelines_list_data(project, list_url)
         endpoint: list_url,
         project_id: project.id,
         default_branch_name: project.default_branch,
-        params: params.to_json,
+        params: Gitlab::Json.dump(params),
         artifacts_endpoint: downloadable_artifacts_project_pipeline_path(project, artifacts_endpoint_placeholder, format: :json),
         artifacts_endpoint_placeholder: artifacts_endpoint_placeholder,
         pipeline_schedule_url: pipeline_schedules_path(project),
@@ -100,7 +100,7 @@ def pipelines_list_data(project, list_url)
         reset_cache_path: can?(current_user, :admin_pipeline, project) && reset_cache_project_settings_ci_cd_path(project),
         has_gitlab_ci: has_gitlab_ci?(project).to_s,
         pipeline_editor_path: can?(current_user, :create_pipeline, project) && project_ci_pipeline_editor_path(project),
-        suggested_ci_templates: suggested_ci_templates.to_json,
+        suggested_ci_templates: Gitlab::Json.dump(suggested_ci_templates),
         ci_runner_settings_path: project_settings_ci_cd_path(project, ci_runner_templates: true, anchor: 'js-runners-settings')
       }
 
diff --git a/app/helpers/compare_helper.rb b/app/helpers/compare_helper.rb
index 9ecf780f55b094c6ebdf71cbe139ee395d3e6eea..91f8567aa2d8ee28c2625adf65b9f6820140b980 100644
--- a/app/helpers/compare_helper.rb
+++ b/app/helpers/compare_helper.rb
@@ -37,17 +37,17 @@ def target_projects(source_project)
   def project_compare_selector_data(project, merge_request, params)
     {
       project_compare_index_path: project_compare_index_path(project),
-      source_project: { id: project.id, name: project.full_path }.to_json,
-      target_project: { id: @target_project.id, name: @target_project.full_path }.to_json,
+      source_project: Gitlab::Json.dump({ id: project.id, name: project.full_path }),
+      target_project: Gitlab::Json.dump({ id: @target_project.id, name: @target_project.full_path }),
       source_project_refs_path: refs_project_path(project),
       target_project_refs_path: refs_project_path(@target_project),
       params_from: params[:from],
       params_to: params[:to],
       straight: params[:straight]
     }.tap do |data|
-      data[:projects_from] = target_projects(project).map do |target_project|
+      data[:projects_from] = Gitlab::Json.dump(target_projects(project).map do |target_project|
         { id: target_project.id, name: target_project.full_path }
-      end.to_json
+      end)
 
       data[:project_merge_request_path] =
         if merge_request.present?
diff --git a/app/helpers/emails_helper.rb b/app/helpers/emails_helper.rb
index 54733fa9101f659e373360eb1941fe6e40bbf0ab..fe3324120eb2b65f5118248775098c100f6986fb 100644
--- a/app/helpers/emails_helper.rb
+++ b/app/helpers/emails_helper.rb
@@ -36,7 +36,7 @@ def gmail_goto_action(name, url)
     }
 
     content_tag :script, type: 'application/ld+json' do
-      data.to_json.html_safe
+      Gitlab::Json.dump(data).html_safe
     end
   end
 
diff --git a/app/helpers/environment_helper.rb b/app/helpers/environment_helper.rb
index b6997b6fb70a45ebca455382cc9314f971441871..677892e7d327f90db30bc946d581219763da859f 100644
--- a/app/helpers/environment_helper.rb
+++ b/app/helpers/environment_helper.rb
@@ -91,6 +91,6 @@ def environments_detail_data(user, project, environment)
   end
 
   def environments_detail_data_json(user, project, environment)
-    environments_detail_data(user, project, environment).to_json
+    Gitlab::Json.dump(environments_detail_data(user, project, environment))
   end
 end
diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb
index 6b00c2138759cbb34dd567bd0348aa974efebab9..1612c161f01b548cdaff14cd41cff54bfb74199f 100644
--- a/app/helpers/groups_helper.rb
+++ b/app/helpers/groups_helper.rb
@@ -119,7 +119,7 @@ def parent_group_options(current_group)
       { id: group.id, text: group.human_name }
     end
 
-    groups.to_json
+    Gitlab::Json.dump(groups)
   end
 
   def render_setting_to_allow_project_access_token_creation?(group)
diff --git a/app/helpers/ide_helper.rb b/app/helpers/ide_helper.rb
index 5b3ca25b5afa82883ad2be2c83569d1e69bd2b0c..cdc3804d1927a6c1bbaa193339b384cd4b29137d 100644
--- a/app/helpers/ide_helper.rb
+++ b/app/helpers/ide_helper.rb
@@ -56,7 +56,7 @@ def legacy_ide_data
   def convert_to_project_entity_json(project)
     return unless project
 
-    API::Entities::Project.represent(project, current_user: current_user).to_json
+    Gitlab::Json.dump(API::Entities::Project.represent(project, current_user: current_user))
   end
 
   def enable_environments_guidance?
diff --git a/app/helpers/integrations_helper.rb b/app/helpers/integrations_helper.rb
index abfa55cff24c0d6aa64b514d217055009a58d5d3..14eec407d15ca8fc1b830a1e8ea85c8b0d0e80b6 100644
--- a/app/helpers/integrations_helper.rb
+++ b/app/helpers/integrations_helper.rb
@@ -114,7 +114,7 @@ def integration_form_data(integration, project: nil, group: nil)
       learn_more_path: integrations_help_page_path,
       about_pricing_url: Gitlab::Saas.about_pricing_url,
       trigger_events: trigger_events_for_integration(integration),
-      sections: integration.sections.to_json,
+      sections: Gitlab::Json.dump(integration.sections),
       fields: fields_for_integration(integration),
       inherit_from_id: integration.inherit_from_id,
       integration_level: integration_level(integration),
@@ -144,7 +144,7 @@ def integration_overrides_data(integration, project: nil, group: nil)
 
   def integration_list_data(integrations, group: nil, project: nil)
     {
-      integrations: integrations.map { |i| serialize_integration(i, group: group, project: project) }.to_json
+      integrations: Gitlab::Json.dump(integrations.map { |i| serialize_integration(i, group: group, project: project) })
     }
   end
 
@@ -237,11 +237,15 @@ def default_integration_event_description(event)
   end
 
   def trigger_events_for_integration(integration)
-    Integrations::EventSerializer.new(integration: integration).represent(integration.configurable_events).to_json
+    serializer = Integrations::EventSerializer.new(integration: integration).represent(integration.configurable_events)
+
+    Gitlab::Json.dump(serializer)
   end
 
   def fields_for_integration(integration)
-    Integrations::FieldSerializer.new(integration: integration).represent(integration.form_fields).to_json
+    serializer = Integrations::FieldSerializer.new(integration: integration).represent(integration.form_fields)
+
+    Gitlab::Json.dump(serializer)
   end
 
   def integration_level(integration)
diff --git a/app/helpers/invite_members_helper.rb b/app/helpers/invite_members_helper.rb
index 5d537767eaf394d21f95e4ef4337216d7700e4e1..8672dfb39dceecd86c144be57e9f0e269546b327 100644
--- a/app/helpers/invite_members_helper.rb
+++ b/app/helpers/invite_members_helper.rb
@@ -29,7 +29,7 @@ def common_invite_group_modal_data(source, member_class, is_project)
       invalid_groups: source.related_group_ids,
       help_link: help_page_url('user/permissions'),
       is_project: is_project,
-      access_levels: member_class.permissible_access_level_roles(current_user, source).to_json
+      access_levels: Gitlab::Json.dump(member_class.permissible_access_level_roles(current_user, source))
     }.merge(group_select_data(source))
   end
 
@@ -44,8 +44,8 @@ def common_invite_modal_dataset(source)
 
     if show_invite_members_for_task?(source)
       dataset.merge!(
-        tasks_to_be_done_options: tasks_to_be_done_options.to_json,
-        projects: projects_for_source(source).to_json,
+        tasks_to_be_done_options: Gitlab::Json.dump(tasks_to_be_done_options),
+        projects: Gitlab::Json.dump(projects_for_source(source)),
         new_project_path: source.is_a?(Group) ? new_project_path(namespace_id: source.id) : ''
       )
     end
diff --git a/app/helpers/issuables_description_templates_helper.rb b/app/helpers/issuables_description_templates_helper.rb
index 58b86dca1e0c3bd92ead4656c8fea1581f3f0004..075b2710722f47cd968558f1863368b5015f647c 100644
--- a/app/helpers/issuables_description_templates_helper.rb
+++ b/app/helpers/issuables_description_templates_helper.rb
@@ -53,7 +53,7 @@ def template_names(issuable)
   end
 
   def available_service_desk_templates_for(project)
-    issuable_templates(project, 'issue').flatten.to_json
+    Gitlab::Json.dump(issuable_templates(project, 'issue').flatten)
   end
 
   def template_names_path(parent, issuable)
diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb
index e9e6241a6a7713ceaf6ed63bbaa6c13ddc9acca0..0a5d02cbcc7db2b44e023f0e29ff6ec9d794aa6a 100644
--- a/app/helpers/issuables_helper.rb
+++ b/app/helpers/issuables_helper.rb
@@ -73,10 +73,9 @@ def serialize_issuable(issuable, opts = {})
                          MergeRequestSerializer
                        end
 
-    serializer_klass
+    Gitlab::Json.dump(serializer_klass
       .new(current_user: current_user, project: issuable.project)
-      .represent(issuable, opts)
-      .to_json
+      .represent(issuable, opts))
   end
 
   def users_dropdown_label(selected_users)
@@ -441,7 +440,7 @@ def sidebar_labels_data(issuable_sidebar, project)
       labels_manage_path: project_labels_path(project),
       project_issues_path: issuable_sidebar[:project_issuables_path],
       project_path: project.full_path,
-      selected_labels: issuable_sidebar[:labels].to_json
+      selected_labels: Gitlab::Json.dump(issuable_sidebar[:labels])
     }
   end
 
diff --git a/app/helpers/jira_connect_helper.rb b/app/helpers/jira_connect_helper.rb
index 0971fdae8dd01e356ccdeefd208cccba44decab0..70e1f7ca4f602432e3b9f5dbc8520cc2d5afd41b 100644
--- a/app/helpers/jira_connect_helper.rb
+++ b/app/helpers/jira_connect_helper.rb
@@ -6,12 +6,12 @@ def jira_connect_app_data(subscriptions, installation)
 
     {
       groups_path: api_v4_groups_path(params: { min_access_level: Gitlab::Access::MAINTAINER, skip_groups: skip_groups }),
-      subscriptions: subscriptions.map { |s| serialize_subscription(s) }.to_json,
+      subscriptions: Gitlab::Json.dump(subscriptions.map { |s| serialize_subscription(s) }),
       add_subscriptions_path: jira_connect_subscriptions_path,
       subscriptions_path: jira_connect_subscriptions_path(format: :json),
       users_path: current_user ? nil : jira_connect_users_path, # users_path is used to determine if user is signed in
       gitlab_user_path: current_user ? user_path(current_user) : nil,
-      oauth_metadata: Feature.enabled?(:jira_connect_oauth, current_user) ? jira_connect_oauth_data(installation).to_json : nil
+      oauth_metadata: Feature.enabled?(:jira_connect_oauth, current_user) ? Gitlab::Json.dump(jira_connect_oauth_data(installation)) : nil
     }
   end
 
diff --git a/app/helpers/learn_gitlab_helper.rb b/app/helpers/learn_gitlab_helper.rb
index a07922e451aea80f256fe17bf4dda4f92cc6b695..485a85cc73f8047ad287dd8cace767925572666e 100644
--- a/app/helpers/learn_gitlab_helper.rb
+++ b/app/helpers/learn_gitlab_helper.rb
@@ -14,9 +14,9 @@ def learn_gitlab_enabled?(project)
 
   def learn_gitlab_data(project)
     {
-      actions: onboarding_actions_data(project).to_json,
-      sections: onboarding_sections_data.to_json,
-      project: onboarding_project_data(project).to_json
+      actions: Gitlab::Json.dump(onboarding_actions_data(project)),
+      sections: Gitlab::Json.dump(onboarding_sections_data),
+      project: Gitlab::Json.dump(onboarding_project_data(project))
     }
   end
 
diff --git a/app/helpers/namespaces_helper.rb b/app/helpers/namespaces_helper.rb
index 60796e628a334169ba553882a925e5413449081d..3d4f7254c18450a8683e78e5decf36fe4dfb5dbe 100644
--- a/app/helpers/namespaces_helper.rb
+++ b/app/helpers/namespaces_helper.rb
@@ -67,7 +67,7 @@ def cascading_namespace_settings_popover_data(attribute, group, settings_path_he
     end
 
     {
-      popover_data: popover_data.to_json,
+      popover_data: Gitlab::Json.dump(popover_data),
       testid: 'cascading-settings-lock-icon'
     }
   end
diff --git a/app/helpers/notes_helper.rb b/app/helpers/notes_helper.rb
index b47f4633348e6796ca01716e4f1253c018a93643..c0d26d4759d947da5288f4d7acbed42ca83dcf3d 100644
--- a/app/helpers/notes_helper.rb
+++ b/app/helpers/notes_helper.rb
@@ -22,12 +22,14 @@ def note_supports_quick_actions?(note)
   end
 
   def noteable_json(noteable)
-    {
+    data = {
       id: noteable.id,
       class: noteable.class.name,
       resources: noteable.class.table_name,
       project_id: noteable.project.id
-    }.to_json
+    }
+
+    Gitlab::Json.dump(data)
   end
 
   def diff_view_data
diff --git a/app/helpers/operations_helper.rb b/app/helpers/operations_helper.rb
index baeb9a477c3b5691562b628a1c24066069ac46c8..542b8260d204258fe9775593d1e23ee8a4fa902e 100644
--- a/app/helpers/operations_helper.rb
+++ b/app/helpers/operations_helper.rb
@@ -26,7 +26,7 @@ def alerts_settings_data(disabled: false)
       'disabled' => disabled.to_s,
       'project_path' => @project.full_path,
       'multi_integrations' => 'false',
-      'templates' => templates.to_json,
+      'templates' => Gitlab::Json.dump(templates),
       'create_issue' => setting.create_issue.to_s,
       'issue_template_key' => setting.issue_template_key.to_s,
       'send_email' => setting.send_email.to_s,
diff --git a/app/helpers/packages_helper.rb b/app/helpers/packages_helper.rb
index f9ec20bdd018338afe089836a6142c42ecdf8305..9f72acf40b52f35efec04ad29e2023734cf3d935 100644
--- a/app/helpers/packages_helper.rb
+++ b/app/helpers/packages_helper.rb
@@ -24,7 +24,7 @@ def package_registry_project_url(project_id, registry_type = :maven)
   def package_from_presenter(package)
     presenter = ::Packages::Detail::PackagePresenter.new(package)
 
-    presenter.detail_view.to_json
+    Gitlab::Json.dump(presenter.detail_view)
   end
 
   def pypi_registry_url(project_id)
@@ -68,9 +68,9 @@ def cleanup_settings_data
     {
       project_id: @project.id,
       project_path: @project.full_path,
-      cadence_options: cadence_options.to_json,
-      keep_n_options: keep_n_options.to_json,
-      older_than_options: older_than_options.to_json,
+      cadence_options: Gitlab::Json.dump(cadence_options),
+      keep_n_options: Gitlab::Json.dump(keep_n_options),
+      older_than_options: Gitlab::Json.dump(older_than_options),
       is_admin: current_user&.admin.to_s,
       admin_settings_path: ci_cd_admin_application_settings_path(anchor: 'js-registry-settings'),
       project_settings_path: project_settings_packages_and_registries_path(@project),
diff --git a/app/helpers/projects/project_members_helper.rb b/app/helpers/projects/project_members_helper.rb
index 51a7d3e35d0fdd3fe3bc3495b9190fdc2b52dfdd..e35277eabaa834e6f075679754c1f7534bfc6c63 100644
--- a/app/helpers/projects/project_members_helper.rb
+++ b/app/helpers/projects/project_members_helper.rb
@@ -2,14 +2,14 @@
 
 module Projects::ProjectMembersHelper
   def project_members_app_data_json(project, members:, invited:, access_requests:, include_relations:, search:)
-    {
+    Gitlab::Json.dump({
       user: project_members_list_data(project, members, { param_name: :page, params: { search_groups: nil } }),
       group: project_group_links_list_data(project, include_relations, search),
       invite: project_members_list_data(project, invited.nil? ? [] : invited),
       access_request: project_members_list_data(project, access_requests.nil? ? [] : access_requests),
       source_id: project.id,
       can_manage_members: Ability.allowed?(current_user, :admin_project_member, project)
-    }.to_json
+    })
   end
 
   def project_member_header_subtext(project)
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 122a0ae5277b5ddac3078d5af7eeb73d0ebab0dd..53c29a3c8b443e1f7f7a69ac3b64af8d575bf93e 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -300,13 +300,15 @@ def error_tracking_setting_project_json
     return if setting.blank? || setting.project_slug.blank? ||
         setting.organization_slug.blank?
 
-    {
+    data = {
       sentry_project_id: setting.sentry_project_id,
       name: setting.project_name,
       organization_name: setting.organization_name,
       organization_slug: setting.organization_slug,
       slug: setting.project_slug
-    }.to_json
+    }
+
+    Gitlab::Json.dump(data)
   end
 
   def directory?
diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb
index 7741f7141345d9c3ad54443f9bfea3df0778c77b..b3f82e89dfae5f387a249932cf6853a57b2c40f2 100644
--- a/app/helpers/search_helper.rb
+++ b/app/helpers/search_helper.rb
@@ -440,9 +440,9 @@ def search_navigation
   end
 
   def search_navigation_json
-    search_navigation.each_with_object({}) do |(key, value), hash|
+    Gitlab::Json.dump(search_navigation.each_with_object({}) do |(key, value), hash|
       hash[key] = search_filter_link_json(key, value[:label], value[:data], value[:search]) if value[:condition]
-    end.to_json
+    end)
   end
 
   def search_filter_input_options(type, placeholder = _('Search or filter results...'))
diff --git a/app/helpers/terms_helper.rb b/app/helpers/terms_helper.rb
index 5f321551413be92603708bb58cae4a490b48e7e6..1dc5e4f197477f90b0f64dc38b3d3f26d3c1e748 100644
--- a/app/helpers/terms_helper.rb
+++ b/app/helpers/terms_helper.rb
@@ -4,7 +4,7 @@ module TermsHelper
   def terms_data(terms, redirect)
     redirect_params = { redirect: redirect } if redirect
 
-    {
+    data = {
       terms: markdown_field(terms, :terms),
       permissions: {
         can_accept: can?(current_user, :accept_terms, terms),
@@ -15,6 +15,8 @@ def terms_data(terms, redirect)
         decline: decline_term_path(terms, redirect_params),
         root: root_path
       }
-    }.to_json
+    }
+
+    Gitlab::Json.dump(data)
   end
 end
diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb
index 4f345fdeb9cd9cd443dc936464ce4c0bd9b9ba34..d66942c2884603665d8ff7738a88c7bfab2543fe 100644
--- a/app/helpers/users_helper.rb
+++ b/app/helpers/users_helper.rb
@@ -3,8 +3,8 @@
 module UsersHelper
   def admin_users_data_attributes(users)
     {
-      users: Admin::UserSerializer.new.represent(users, { current_user: current_user }).to_json,
-      paths: admin_users_paths.to_json
+      users: Gitlab::Json.dump(Admin::UserSerializer.new.represent(users, { current_user: current_user })),
+      paths: Gitlab::Json.dump(admin_users_paths)
     }
   end
 
@@ -163,8 +163,8 @@ def user_display_name(user)
 
   def admin_user_actions_data_attributes(user)
     {
-      user: Admin::UserEntity.represent(user, { current_user: current_user }).to_json,
-      paths: admin_users_paths.to_json
+      user: Gitlab::Json.dump(Admin::UserEntity.represent(user, { current_user: current_user })),
+      paths: Gitlab::Json.dump(admin_users_paths)
     }
   end
 
diff --git a/spec/helpers/users_helper_spec.rb b/spec/helpers/users_helper_spec.rb
index c2c78be6a0fba149a56e7fdbca41b42ab8867204..6971ec83ce2dfd92bf814f5cb44d37ca06974eba 100644
--- a/spec/helpers/users_helper_spec.rb
+++ b/spec/helpers/users_helper_spec.rb
@@ -391,7 +391,7 @@ def stub_profile_permission_allowed(allowed, current_user = nil)
       expect_next_instance_of(Admin::UserSerializer) do |instance|
         expect(instance).to receive(:represent).with([user], { current_user: user }).and_return(entity)
       end
-      expect(entity).to receive(:to_json).and_return("{\"username\":\"admin\"}")
+      expect(entity).to receive(:as_json).and_return({ "username" => "admin" })
       expect(data[:users]).to eq "{\"username\":\"admin\"}"
     end