diff --git a/src/armnn/JsonPrinter.cpp b/src/armnn/JsonPrinter.cpp
index 94ff7c0..4be956b 100644
--- a/src/armnn/JsonPrinter.cpp
+++ b/src/armnn/JsonPrinter.cpp
@@ -45,12 +45,29 @@
     }
     else if (object.GetType() == JsonObjectType::ExecObjectDesc)
     {
+        // Add details opening
+        DecrementNumberOfTabs();
+        PrintTabs();
+        m_OutputStream << std::quoted("Graph") << ":[{";
+        PrintNewLine();
+        IncrementNumberOfTabs();
+
+        // Fill details body
         for (std::string stringLine : object.m_LayerDetailsList)
         {
            PrintTabs();
            m_OutputStream << stringLine;
            PrintNewLine();
         }
+
+        // Close out details
+        DecrementNumberOfTabs();
+        PrintTabs();
+
+        object.IsDetailsOnlyEnabled() ? m_OutputStream << "]" : m_OutputStream << "],";
+
+        PrintNewLine();
+        IncrementNumberOfTabs();
     }
     if (!object.m_Children.empty())
     {
diff --git a/src/armnn/JsonPrinter.hpp b/src/armnn/JsonPrinter.hpp
index 9e8ecb4..d9b8386 100644
--- a/src/armnn/JsonPrinter.hpp
+++ b/src/armnn/JsonPrinter.hpp
@@ -31,7 +31,8 @@
         : m_Label(label),
           m_Unit(Measurement::Unit::TIME_MS),
           m_Type(JsonObjectType::Event),
-          m_Guid(armnn::EmptyOptional())
+          m_Guid(armnn::EmptyOptional()),
+          m_DetailsOnly(false)
     {}
     JsonChildObject(const JsonChildObject&) = default;
 
@@ -85,6 +86,16 @@
         return m_Type;
     }
 
+    void EnableDetailsOnly()
+    {
+        m_DetailsOnly = true;
+    }
+
+    bool IsDetailsOnlyEnabled() const
+    {
+        return m_DetailsOnly;
+    }
+
     ~JsonChildObject() = default;
 
     std::string m_Label;
@@ -96,6 +107,7 @@
     std::vector<JsonChildObject> m_Children;
 
 private:
+    bool m_DetailsOnly;
     JsonChildObject() = delete;
 };
 
diff --git a/src/armnn/Profiling.cpp b/src/armnn/Profiling.cpp
index 6a3522b..e7df459 100644
--- a/src/armnn/Profiling.cpp
+++ b/src/armnn/Profiling.cpp
@@ -411,7 +411,12 @@
          || m_DetailsToStdOutMethod == ProfilingDetailsMethod::DetailsWithEvents))
     {
         JsonChildObject detailsObject{ "layer_details" };
-        ConfigureDetailsObject(detailsObject, m_ProfilingDetails.get()->GetProfilingDetails());
+        if (m_DetailsToStdOutMethod == ProfilingDetailsMethod::DetailsOnly)
+        {
+            detailsObject.EnableDetailsOnly();
+        }
+        detailsObject.SetType(JsonObjectType::ExecObjectDesc);
+        detailsObject.SetAndParseDetails(m_ProfilingDetails.get()->GetProfilingDetails());
 
         size_t id = 0;
         printer.PrintJsonChildObject(detailsObject, id);
@@ -428,9 +433,9 @@
         printer.PrintSeparator();
         printer.PrintNewLine();
         printer.PrintJsonChildObject(inferenceObject, id);
+        printer.PrintNewLine();
     }
     // end of ArmNN
-    printer.PrintNewLine();
     printer.PrintFooter();
 
     // end of main JSON object
diff --git a/src/armnn/ProfilingDetails.hpp b/src/armnn/ProfilingDetails.hpp
index befc437..1bed395 100644
--- a/src/armnn/ProfilingDetails.hpp
+++ b/src/armnn/ProfilingDetails.hpp
@@ -36,6 +36,13 @@
                             const WorkloadInfo& infos,
                             const profiling::ProfilingGuid guid)
     {
+        // Once details exist, we can assume we're on the second iteration of details
+        if (m_DetailsExist)
+        {
+            PrintSeparator();
+            PrintNewLine();
+        }
+
         m_ProfilingDetails << std::quoted("Name") << ": " << std::quoted(workloadName) << " ";
         PrintHeader();
 
@@ -78,8 +85,6 @@
         StringifyLayerParameters<DescriptorType>::Serialize(extractParams, desc);
 
         PrintFooter();
-        PrintSeparator();
-        PrintNewLine();
 
         m_DetailsExist = true;
     }
