summaryrefslogtreecommitdiff
path: root/src/json.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/json.cc')
-rw-r--r--src/json.cc22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/json.cc b/src/json.cc
index d37cba0..fc60ade 100644
--- a/src/json.cc
+++ b/src/json.cc
@@ -304,10 +304,30 @@ std::ostream& quoted(std::ostream& os, const std::string& str) {
os << '"';
size_t last = 0;
for (size_t i = 0; i < str.size(); ++i) {
- if (str[i] == '"' || str[i] == '\\') {
+ switch (str[i]) {
+ case '"':
+ case '\\':
os << str.substr(last, i - last);
os << '\\';
last = i;
+ break;
+ case '\n':
+ case '\r':
+ case '\t':
+ os << str.substr(last, i - last);
+ switch (str[i]) {
+ case '\n':
+ os << "\\n";
+ break;
+ case '\r':
+ os << "\\r";
+ break;
+ case '\t':
+ os << "\\t";
+ break;
+ }
+ last = i + 1;
+ break;
}
}
os << str.substr(last);