diff --git a/tdutils/td/utils/JsonBuilder.cpp b/tdutils/td/utils/JsonBuilder.cpp index 6b48dab21..e4f817cfb 100644 --- a/tdutils/td/utils/JsonBuilder.cpp +++ b/tdutils/td/utils/JsonBuilder.cpp @@ -394,10 +394,10 @@ Result do_json_decode(Parser &parser, int32 max_depth) { case '{': { parser.skip('{'); parser.skip_whitespaces(); - JsonObject res; if (parser.try_skip('}')) { - return JsonValue::make_object(std::move(res)); + return JsonValue::make_object(JsonObject()); } + vector> field_values; while (true) { if (parser.empty()) { return Status::Error("Unexpected string end"); @@ -408,7 +408,7 @@ Result do_json_decode(Parser &parser, int32 max_depth) { return Status::Error("':' expected"); } TRY_RESULT(value, do_json_decode(parser, max_depth - 1)); - res.field_values_.emplace_back(field, std::move(value)); + field_values.emplace_back(field, std::move(value)); parser.skip_whitespaces(); if (parser.try_skip('}')) { @@ -423,7 +423,7 @@ Result do_json_decode(Parser &parser, int32 max_depth) { } return Status::Error("Unexpected symbol while parsing JSON Object"); } - return JsonValue::make_object(std::move(res)); + return JsonValue::make_object(JsonObject(std::move(field_values))); } case '-': case '+': diff --git a/tdutils/td/utils/JsonBuilder.h b/tdutils/td/utils/JsonBuilder.h index 195d777fa..3c9be2be1 100644 --- a/tdutils/td/utils/JsonBuilder.h +++ b/tdutils/td/utils/JsonBuilder.h @@ -460,7 +460,12 @@ class JsonObject { const JsonValue *get_field(Slice name) const; public: - vector> field_values_; + vector> field_values_; + + JsonObject() = default; + + explicit JsonObject(vector> &&field_values) : field_values_(std::move(field_values)) { + } size_t field_count() const { return field_values_.size();