mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-18 13:02:25 +02:00
Added escaped char replacement
This commit is contained in:
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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");
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user