From 290c2e17f5b2c0474207d252e75ab297655d0ab7 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 15 Sep 2025 20:49:22 -0500 Subject: [PATCH] simplier --- esphome/components/json/json_util.cpp | 43 +++++---------------------- esphome/components/json/json_util.h | 19 ++++++++---- 2 files changed, 22 insertions(+), 40 deletions(-) diff --git a/esphome/components/json/json_util.cpp b/esphome/components/json/json_util.cpp index 13647af11c..6d1d258c13 100644 --- a/esphome/components/json/json_util.cpp +++ b/esphome/components/json/json_util.cpp @@ -70,50 +70,23 @@ bool parse_json(const std::string &data, const json_parse_t &f) { } // JsonBuilder implementation -class JsonBuilder::Impl { - public: - Impl() { +JsonBuilder::JsonBuilder() + : doc_( #ifdef USE_PSRAM - allocator_ = std::make_unique(); - doc_ = std::make_unique(allocator_.get()); + (allocator_ = std::make_unique(), allocator_.get()) #else - doc_ = std::make_unique(); + nullptr #endif - } - - JsonObject root() { - if (!root_created_) { - root_ = doc_->to(); - root_created_ = true; - } - return root_; - } - - bool overflowed() const { return doc_->overflowed(); } - - void serialize_to(std::string &output) { serializeJson(*doc_, output); } - - private: -#ifdef USE_PSRAM - std::unique_ptr allocator_; -#endif - std::unique_ptr doc_; - JsonObject root_; - bool root_created_{false}; -}; - -JsonBuilder::JsonBuilder() : impl_(std::make_unique()) {} -JsonBuilder::~JsonBuilder() = default; - -JsonObject JsonBuilder::root() { return impl_->root(); } + ) { +} std::string JsonBuilder::serialize() { - if (impl_->overflowed()) { + if (doc_.overflowed()) { ESP_LOGE(TAG, "JSON document overflow"); return "{}"; } std::string output; - impl_->serialize_to(output); + serializeJson(doc_, output); return output; } diff --git a/esphome/components/json/json_util.h b/esphome/components/json/json_util.h index 5004bb6a21..64658aa194 100644 --- a/esphome/components/json/json_util.h +++ b/esphome/components/json/json_util.h @@ -29,15 +29,24 @@ bool parse_json(const std::string &data, const json_parse_t &f); class JsonBuilder { public: JsonBuilder(); - ~JsonBuilder(); - JsonObject root(); + JsonObject root() { + if (!root_created_) { + root_ = doc_.to(); + root_created_ = true; + } + return root_; + } + std::string serialize(); private: - // Use opaque pointer to hide implementation details - class Impl; - std::unique_ptr impl_; +#ifdef USE_PSRAM + std::unique_ptr allocator_; +#endif + JsonDocument doc_; + JsonObject root_; + bool root_created_{false}; }; } // namespace json