diff --git a/AKModel/models.py b/AKModel/models.py
index a612f49e9ac2f1f24876fc56f1260c3fa2c2de7b..27075105b2910f6aebf77039a83afe17939f13b5 100644
--- a/AKModel/models.py
+++ b/AKModel/models.py
@@ -4,7 +4,7 @@ import json
 import math
 from dataclasses import dataclass
 from datetime import datetime, timedelta
-from typing import Iterable, Generator
+from typing import Any, Iterable, Generator
 
 from django.db import models, transaction
 from django.apps import apps
@@ -889,7 +889,7 @@ class Room(models.Model):
     def __str__(self):
         return self.title
 
-    def as_json(self) -> str:
+    def as_json_dict(self) -> dict[str, Any]:
         """Return a json string representation of this room object.
 
         :return: The json string representation is constructed
@@ -924,7 +924,7 @@ class Room(models.Model):
         if not any(constr.startswith("proxy") for constr in data["fulfilled_room_constraints"]):
             data["fulfilled_room_constraints"].append("no-proxy")
 
-        return json.dumps(data)
+        return data
 
 
 class AKSlot(models.Model):
@@ -1021,7 +1021,7 @@ class AKSlot(models.Model):
             self.duration = min(self.duration, event_duration_hours)
         super().save(force_insert, force_update, using, update_fields)
 
-    def as_json(self) -> str:
+    def as_json_dict(self) -> dict[str, Any]:
         """Return a json string representation of the AK object of this slot.
 
         :return: The json string representation is constructed
@@ -1093,7 +1093,7 @@ class AKSlot(models.Model):
         if not any(constr.startswith("proxy") for constr in data["room_constraints"]):
             data["room_constraints"].append("no-proxy")
 
-        return json.dumps(data)
+        return data
 
 class AKOrgaMessage(models.Model):
     """
diff --git a/AKModel/templates/admin/AKModel/ak_json_export.html b/AKModel/templates/admin/AKModel/ak_json_export.html
index 38e5526edc8364faf75491e68cb893b10d64751a..65e459a5b3f7509ed98a1329e2d89f06fa2abb54 100644
--- a/AKModel/templates/admin/AKModel/ak_json_export.html
+++ b/AKModel/templates/admin/AKModel/ak_json_export.html
@@ -3,18 +3,18 @@
 {% load tz %}
 
 {% block content %}
+
+<p>
+Exported JSON:
+<pre>
+{{ json_data_oneline }}
+</pre>
+</p>
+
+<p>
+Exported JSON (indented for better readability):
 <pre>
-  {"aks": [
-      {% for slot in slots %}{{ slot.as_json }}{% if not forloop.last %},
-      {% endif %}{% endfor %}
-    ],
-  "rooms": [
-      {% for room in rooms %}{{ room.as_json }}{% if not forloop.last %},
-      {% endif %}{% endfor %}
-    ],
-  "participants": {{ participants }},
-  "timeslots": {{ timeslots }},
-  "info": {{ info_dict }}
-  }
+{{ json_data }}
 </pre>
+</p>
 {% endblock %}
diff --git a/AKModel/views/ak.py b/AKModel/views/ak.py
index 40a6e10201b69784e27d20e53a8209fd07ecf430..518ddbb52f5cb7da144fdfccbd9926ef21e87b0f 100644
--- a/AKModel/views/ak.py
+++ b/AKModel/views/ak.py
@@ -86,16 +86,14 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView):
 
     def get_context_data(self, **kwargs):
         context = super().get_context_data(**kwargs)
-        context["participants"] = json.dumps([])
-
-        rooms = Room.objects.filter(event=self.event)
-        context["rooms"] = rooms
 
         timeslots = {
             "info": {"duration": float(self.event.export_slot)},
             "blocks": [],
             }
 
+        rooms = Room.objects.filter(event=self.event)
+
         ak_availabilities = {
             ak.pk: Availability.union(ak.availabilities.all())
             for ak in AK.objects.filter(event=self.event).all()
@@ -179,17 +177,25 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView):
 
         timeslots["info"]["blocknames"] = block_names
 
-        context["timeslots"] = json.dumps(timeslots)
-
         info_dict = {
             "title": self.event.name,
             "slug": self.event.slug
         }
+
         for attr in ["contact_email", "place"]:
             if hasattr(self.event, attr) and getattr(self.event, attr):
                 info_dict[attr] = getattr(self.event, attr)
 
-        context["info_dict"] = json.dumps(info_dict)
+        data = {
+            "participants": [],
+            "rooms": [r.as_json_dict() for r in rooms],
+            "timeslots": timeslots,
+            "info": info_dict,
+            "aks": [ak.as_json_dict() for ak in context["slots"]],
+        }
+
+        context["json_data_oneline"] = json.dumps(data)
+        context["json_data"] = json.dumps(data, indent=2)
 
         return context