summaryrefslogtreecommitdiffstats
path: root/src/uscxml/Message.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/uscxml/Message.cpp')
-rw-r--r--src/uscxml/Message.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/uscxml/Message.cpp b/src/uscxml/Message.cpp
index b664fd1..bbd7f28 100644
--- a/src/uscxml/Message.cpp
+++ b/src/uscxml/Message.cpp
@@ -318,8 +318,7 @@ Data Data::fromXML(const std::string& xmlString) {
Data Data::fromJSON(const std::string& jsonString) {
Data data;
- std::string trimmed = jsonString;
- boost::trim(trimmed);
+ std::string trimmed = boost::trim_copy(jsonString);
if (trimmed.length() == 0)
return data;
@@ -387,23 +386,29 @@ Data Data::fromJSON(const std::string& jsonString) {
size_t currTok = 0;
do {
+ // used for debugging
// jsmntok_t t2 = t[currTok];
// std::string value = trimmed.substr(t[currTok].start, t[currTok].end - t[currTok].start);
switch (t[currTok].type) {
case JSMN_STRING:
dataStack.back()->type = Data::VERBATIM;
- case JSMN_PRIMITIVE:
- dataStack.back()->atom = trimmed.substr(t[currTok].start, t[currTok].end - t[currTok].start);
+ case JSMN_PRIMITIVE: {
+ std::string value = trimmed.substr(t[currTok].start, t[currTok].end - t[currTok].start);
+ if (dataStack.back()->type == Data::VERBATIM) {
+ boost::replace_all(value, "\\\"", "\"");
+ }
+ dataStack.back()->atom = value;
dataStack.pop_back();
currTok++;
break;
+ }
case JSMN_OBJECT:
case JSMN_ARRAY:
tokenStack.push_back(t[currTok]);
currTok++;
break;
}
-
+ // used for debugging
// t2 = t[currTok];
// value = trimmed.substr(t[currTok].start, t[currTok].end - t[currTok].start);
@@ -419,7 +424,8 @@ Data Data::fromJSON(const std::string& jsonString) {
if (tokenStack.back().type == JSMN_OBJECT && (t[currTok].type == JSMN_PRIMITIVE || t[currTok].type == JSMN_STRING)) {
// grab key and push new data
- dataStack.push_back(&(dataStack.back()->compound[trimmed.substr(t[currTok].start, t[currTok].end - t[currTok].start)]));
+ std::string value = trimmed.substr(t[currTok].start, t[currTok].end - t[currTok].start);
+ dataStack.push_back(&(dataStack.back()->compound[value]));
currTok++;
}
if (tokenStack.back().type == JSMN_ARRAY) {