X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=include%2Fanna%2Fjson%2FSaxConsumer.hpp;h=33473ed8dc9e8425bb5505ffb70a64b7a91bc441;hb=1f610e91029512c17466a85b41a090141f7bbf39;hp=110a09704b3b1b4ce7f3e7f02170fb5435f19a93;hpb=415985b3f67878c2e3cee785a0b1cb36f4eff901;p=anna.git diff --git a/include/anna/json/SaxConsumer.hpp b/include/anna/json/SaxConsumer.hpp index 110a097..33473ed 100644 --- a/include/anna/json/SaxConsumer.hpp +++ b/include/anna/json/SaxConsumer.hpp @@ -26,6 +26,7 @@ class SaxConsumer : public nlohmann::json::json_sax_t std::stringstream result_; std::stringstream current_object_; std::stack nodes_stack_; + std::string key_; public: @@ -71,6 +72,7 @@ class SaxConsumer : public nlohmann::json::json_sax_t bool start_object(std::size_t elements) override { + nodes_stack_.push(key_); if (!started_) { started_ = true ; return true; } // ignore first start object (which is whole json object {) indent_ += ANNA_XML_INDENTATION_SPACES; result_ << std::string(indent_, ' ') << "<" << nodes_stack_.top(); @@ -87,11 +89,13 @@ class SaxConsumer : public nlohmann::json::json_sax_t if (close == "") result_ << ""; result_ << "\n"; current_object_.str(""); + nodes_stack_.pop(); return true; } bool start_array(std::size_t elements) override { + nodes_stack_.push(key_); result_ << current_object_.str() << ">\n"; current_object_.str(""); return true; @@ -107,7 +111,7 @@ class SaxConsumer : public nlohmann::json::json_sax_t bool key(string_t& val) override { if (val[0] != '@') { - nodes_stack_.push(val); + key_ = val; } else { current_object_ << " " << val.substr(1) << "=";