Added escaped char replacement

This commit is contained in:
Benoit Blanchon
2014-09-04 21:45:41 +02:00
parent 24d173c3b9
commit 0154fc15cb
3 changed files with 55 additions and 6 deletions

View File

@ -7,6 +7,53 @@
using namespace ArduinoJson::Parser;
static char unescapeChar(char c)
{
switch (c)
{
case 'b': return '\b';
case 'f': return '\f';
case 'n': return '\n';
case 'r': return '\r';
case 't': return '\t';
default: return c;
}
}
static void unescapeString(char* s)
{
char* readPtr = s;
char* writePtr = s;
while (true)
{
if (*readPtr == '\\')
{
readPtr++;
*writePtr = unescapeChar(*readPtr);
}
else
{
*writePtr = *readPtr;
}
if (*writePtr == 0) break;
readPtr++;
writePtr++;
}
}
char* JsonToken::getText()
{
char* s = json + token->start;
json[token->end] = 0;
unescapeString(s);
return s;
}
JsonToken JsonToken::nextSibling() const
{
// start with current token

View File

@ -29,11 +29,7 @@ namespace ArduinoJson
}
// Get content of the JSON token
char* getText()
{
json[token->end] = 0;
return json + token->start;
}
char* getText();
// Get the number of children tokens
int childrenCount()

View File

@ -31,6 +31,12 @@ namespace ArduinoJsonParserTests
outputMustBe(0);
}
TEST_METHOD(SimpleString)
{
whenInputIs("\"Hi!\"");
outputMustBe("Hi!");
}
TEST_METHOD(EscapedQuote)
{
whenInputIs("\"12\\\"34\""); // ie 12\"34
@ -81,7 +87,7 @@ namespace ArduinoJsonParserTests
TEST_METHOD(AllEscapedCharsTogether)
{
whenInputIs("1\\\"2\\\\3\\/4\\b5\\f6\\n7\\r8\\t9\"");
whenInputIs("\"1\\\"2\\\\3\\/4\\b5\\f6\\n7\\r8\\t9\"");
outputMustBe("1\"2\\3/4\b5\f6\n7\r8\t9");
}