diff --git a/src/stan/callbacks/json_writer.hpp b/src/stan/callbacks/json_writer.hpp index 869bbeee46d..b13f6fb14b3 100644 --- a/src/stan/callbacks/json_writer.hpp +++ b/src/stan/callbacks/json_writer.hpp @@ -372,8 +372,9 @@ class json_writer final : public structured_writer { for (auto it = values.begin(); it != last; ++it) { *output_ << process_string(*it) << ", "; } + *output_ << process_string(values.back()); } - *output_ << values.back() << " ]"; + *output_ << " ]"; } /** @@ -420,8 +421,9 @@ class json_writer final : public structured_writer { for (auto it = values.begin(); it != last; ++it) { *output_ << *it << ", "; } + *output_ << values.back(); } - *output_ << values.back() << " ]"; + *output_ << " ]"; } /** @@ -439,12 +441,13 @@ class json_writer final : public structured_writer { *output_ << "[ "; if (values.size() > 0) { - size_t last = values.size() - 1; - for (size_t i = 0; i < last; ++i) { - write_complex_value(values[i]); + auto last = values.end(); + --last; + for (auto it = values.begin(); it != last; ++it) { + write_complex_value(*it); *output_ << ", "; } - write_complex_value(values[last]); + write_complex_value(values.back()); } *output_ << " ]"; } diff --git a/src/test/unit/callbacks/json_writer_test.cpp b/src/test/unit/callbacks/json_writer_test.cpp index 3b0f2613e47..af589637b8d 100644 --- a/src/test/unit/callbacks/json_writer_test.cpp +++ b/src/test/unit/callbacks/json_writer_test.cpp @@ -196,6 +196,17 @@ TEST_F(StanInterfaceCallbacksJsonWriter, write_string_vector) { EXPECT_EQ("\"key\":[0,1,2,3,4]", out); } +TEST_F(StanInterfaceCallbacksJsonWriter, write_weird_string_vector) { + const int N = 5; + std::vector x; + for (int n = 0; n < N; ++n) + x.push_back(std::to_string(n) + "\""); + + writer.write("key", x); + auto out = output_sans_whitespace(ss); + EXPECT_EQ("\"key\":[0\\\",1\\\",2\\\",3\\\",4\\\"]", out); +} + TEST_F(StanInterfaceCallbacksJsonWriter, write_null) { writer.write("message"); auto out = output_sans_whitespace(ss); @@ -228,6 +239,16 @@ TEST_F(StanInterfaceCallbacksJsonWriter, write_empty_vector) { EXPECT_EQ("\"key\":[]", out); } +TEST_F(StanInterfaceCallbacksJsonWriter, write_empty_int_vector) { + std::string key("key"); + std::vector x; + ss.clear(); + x.clear(); + writer.write(key, x); + auto out = output_sans_whitespace(ss); + EXPECT_EQ("\"key\":[]", out); +} + TEST_F(StanInterfaceCallbacksJsonWriter, write_complex) { std::string key("key"); std::complex x(1.110, 2.110);