From 216b7b3b80d11aa0d2e6e937082290acfae59fa8 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Tue, 27 Aug 2019 14:15:30 +0300 Subject: [PATCH] JSON: Port JsonArray and JsonObject serialization to serializers This way, primitive JsonValue serialization is still handled by JsonValue::serialize(), but JsonArray and JsonObject serialization always goes through serializer classes. This is no less efficient if you have the whole JSON in memory already. --- AK/JsonArray.h | 10 +++------- AK/JsonObject.h | 14 +++----------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/AK/JsonArray.h b/AK/JsonArray.h index 9d84d0908b..57fd12bb6b 100644 --- a/AK/JsonArray.h +++ b/AK/JsonArray.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -68,13 +69,8 @@ private: template inline void JsonArray::serialize(Builder& builder) const { - builder.append('['); - for (int i = 0; i < m_values.size(); ++i) { - m_values[i].serialize(builder); - if (i != size() - 1) - builder.append(','); - } - builder.append(']'); + JsonArraySerializer serializer { builder }; + for_each([&](auto& value) { serializer.add(value); }); } template diff --git a/AK/JsonObject.h b/AK/JsonObject.h index a8b3e44523..57c612c64b 100644 --- a/AK/JsonObject.h +++ b/AK/JsonObject.h @@ -3,6 +3,7 @@ #include #include #include +#include #include namespace AK { @@ -79,19 +80,10 @@ private: template inline void JsonObject::serialize(Builder& builder) const { - int index = 0; - builder.append('{'); + JsonObjectSerializer serializer { builder }; for_each_member([&](auto& key, auto& value) { - builder.append('"'); - builder.append(key); - builder.append('"'); - builder.append(':'); - value.serialize(builder); - if (index != size() - 1) - builder.append(','); - ++index; + serializer.add(key, value); }); - builder.append('}'); } template