mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-18 21:12:25 +02:00
Added escaped char replacement
This commit is contained in:
@ -7,6 +7,53 @@
|
|||||||
|
|
||||||
using namespace ArduinoJson::Parser;
|
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
|
JsonToken JsonToken::nextSibling() const
|
||||||
{
|
{
|
||||||
// start with current token
|
// start with current token
|
||||||
|
@ -29,11 +29,7 @@ namespace ArduinoJson
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get content of the JSON token
|
// Get content of the JSON token
|
||||||
char* getText()
|
char* getText();
|
||||||
{
|
|
||||||
json[token->end] = 0;
|
|
||||||
return json + token->start;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the number of children tokens
|
// Get the number of children tokens
|
||||||
int childrenCount()
|
int childrenCount()
|
||||||
|
@ -31,6 +31,12 @@ namespace ArduinoJsonParserTests
|
|||||||
outputMustBe(0);
|
outputMustBe(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_METHOD(SimpleString)
|
||||||
|
{
|
||||||
|
whenInputIs("\"Hi!\"");
|
||||||
|
outputMustBe("Hi!");
|
||||||
|
}
|
||||||
|
|
||||||
TEST_METHOD(EscapedQuote)
|
TEST_METHOD(EscapedQuote)
|
||||||
{
|
{
|
||||||
whenInputIs("\"12\\\"34\""); // ie 12\"34
|
whenInputIs("\"12\\\"34\""); // ie 12\"34
|
||||||
@ -81,7 +87,7 @@ namespace ArduinoJsonParserTests
|
|||||||
|
|
||||||
TEST_METHOD(AllEscapedCharsTogether)
|
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");
|
outputMustBe("1\"2\\3/4\b5\f6\n7\r8\t9");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user