diff options
| author | Joel Klinghed <the_jk@yahoo.com> | 2015-06-09 21:13:50 +0200 |
|---|---|---|
| committer | Joel Klinghed <the_jk@yahoo.com> | 2015-06-09 21:13:50 +0200 |
| commit | bf0d9ff5b2ce6cde02b230ebe1b47fbb4777925f (patch) | |
| tree | 058a9f3f3b41f49a038857e0431113e14f4eeb9c /src/json.cc | |
| parent | 977c5975e4ead8e27becef8b78740fe5da631195 (diff) | |
Fix quoting of special characters in JSON
Diffstat (limited to 'src/json.cc')
| -rw-r--r-- | src/json.cc | 22 |
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); |
