diff --git a/include/jsoncons/json_encoder.hpp b/include/jsoncons/json_encoder.hpp index 6a1daba63..d20673171 100644 --- a/include/jsoncons/json_encoder.hpp +++ b/include/jsoncons/json_encoder.hpp @@ -355,6 +355,7 @@ namespace detail { colon_str_.push_back(':'); break; } + colon_str_.append(options.after_key_chars()); switch (options.spaces_around_comma()) { case spaces_option::space_after: @@ -1021,9 +1022,9 @@ namespace detail { sink_.append(options_.new_line_chars().data(),options_.new_line_chars().length()); for (int i = 0; i < indent_amount_; ++i) { - sink_.push_back(' '); + sink_.append(options_.indent_chars().data(), options_.indent_chars().length()); } - column_ = indent_amount_; + column_ = indent_amount_ * options_.new_line_chars().length(); } void new_line(std::size_t len) @@ -1031,7 +1032,7 @@ namespace detail { sink_.append(options_.new_line_chars().data(),options_.new_line_chars().length()); for (std::size_t i = 0; i < len; ++i) { - sink_.push_back(' '); + sink_.append(options_.indent_chars().data(), options_.indent_chars().length()); } column_ = len; } diff --git a/include/jsoncons/json_options.hpp b/include/jsoncons/json_options.hpp index 58dcf3ba3..74d5ab217 100644 --- a/include/jsoncons/json_options.hpp +++ b/include/jsoncons/json_options.hpp @@ -425,6 +425,8 @@ private: uint8_t indent_size_; std::size_t line_length_limit_; string_type new_line_chars_; + string_type after_key_chars_; + string_type indent_chars_; public: basic_json_encode_options() : escape_all_non_ascii_(false), @@ -445,6 +447,7 @@ public: line_length_limit_(line_length_limit_default) { new_line_chars_.push_back('\n'); + indent_chars_.push_back('\t'); } basic_json_encode_options(const basic_json_encode_options&) = default; @@ -467,7 +470,9 @@ public: precision_(other.precision_), indent_size_(other.indent_size_), line_length_limit_(other.line_length_limit_), - new_line_chars_(std::move(other.new_line_chars_)) + new_line_chars_(std::move(other.new_line_chars_)), + after_key_chars_(std::move(other.after_key_chars_)), + indent_chars_(std::move(other.indent_chars)) { } @@ -515,6 +520,16 @@ public: return new_line_chars_; } + string_type after_key_chars() const + { + return after_key_chars_; + } + + string_type indent_chars() const + { + return indent_chars_; + } + std::size_t line_length_limit() const { return line_length_limit_; @@ -599,6 +614,8 @@ public: using basic_json_encode_options::pad_inside_object_braces; using basic_json_encode_options::pad_inside_array_brackets; using basic_json_encode_options::new_line_chars; + using basic_json_encode_options::after_key_chars; + using basic_json_encode_options::indent_chars; using basic_json_encode_options::line_length_limit; using basic_json_encode_options::float_format; using basic_json_encode_options::precision; @@ -761,6 +778,18 @@ public: return *this; } + basic_json_options& after_key_chars(const string_type& value) + { + this->after_key_chars_ = value; + return *this; + } + + basic_json_options& indent_chars(const string_type& value) + { + this->indent_chars_ = value; + return *this; + } + basic_json_options& lossless_number(bool value) { this->lossless_number_ = value;