diff options
Diffstat (limited to 'src/uscxml/Message.cpp')
-rw-r--r-- | src/uscxml/Message.cpp | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/uscxml/Message.cpp b/src/uscxml/Message.cpp index e8ae98c..aeb0027 100644 --- a/src/uscxml/Message.cpp +++ b/src/uscxml/Message.cpp @@ -721,27 +721,38 @@ std::string Data::toJSON(const Data& data) { } os << "]"; } else if (data.atom.size() > 0) { + // empty string is handled below if (data.type == Data::VERBATIM) { os << "\""; for (int i = 0; i < data.atom.size(); i++) { // escape string - if (data.atom[i] == '"') { + if (false) { + } else if (data.atom[i] == '"') { os << '\\'; + os << data.atom[i]; + } else if (data.atom[i] == '\n') { + os << "\\n"; + } else { + os << data.atom[i]; } - os << data.atom[i]; } os << "\""; } else { os << data.atom; } } else if (data.node) { + std::ostringstream xmlSerSS; + xmlSerSS << data.node; + std::string xmlSer = xmlSerSS.str(); + boost::replace_all(xmlSer, "\"", "\\\""); + boost::replace_all(xmlSer, "\n", "\\n"); + os << "\"" << xmlSer << "\""; + } else { if (data.type == Data::VERBATIM) { - os << ""; + os << "\"\""; // empty string } else { - os << data.atom; + os << "null"; } - } else { - os << "undefined"; } return os.str(); } |