summaryrefslogtreecommitdiff
path: root/src/json.cc
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@yahoo.com>2015-06-09 21:13:50 +0200
committerJoel Klinghed <the_jk@yahoo.com>2015-06-09 21:13:50 +0200
commitbf0d9ff5b2ce6cde02b230ebe1b47fbb4777925f (patch)
tree058a9f3f3b41f49a038857e0431113e14f4eeb9c /src/json.cc
parent977c5975e4ead8e27becef8b78740fe5da631195 (diff)
Fix quoting of special characters in JSON
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);