diff --git a/aJSON.cpp b/aJSON.cpp index 1bb9320..17baa10 100644 --- a/aJSON.cpp +++ b/aJSON.cpp @@ -102,6 +102,12 @@ aJsonStream::write(uint8_t ch) return stream()->write(ch); } +size_t +aJsonStream::write(const uint8_t *str, size_t len) +{ + return stream()->write(str, len); +} + size_t aJsonStream::readBytes(uint8_t *buffer, size_t len) { @@ -432,10 +438,30 @@ aJsonStream::parseString(aJsonObject *item) int aJsonStream::printStringPtr(const char *str) { - this->print("\""); + this->print('"'); char* ptr = (char*) str; - if (ptr != NULL) + if (ptr != NULL && *ptr != '\0') { + char* check = ptr; + bool hasEscapes = false; + while (*check != 0) + { + if ((unsigned char) *check > 31 && *check != '\"' && *check != '\\') + { + } + else + { + hasEscapes = true; + break; + } + check++; + } + if (!hasEscapes) + { + this->print(ptr); + this->print('\"'); + return 0; + } while (*ptr != 0) { if ((unsigned char) *ptr > 31 && *ptr != '\"' && *ptr != '\\') diff --git a/aJSON.h b/aJSON.h index a409a92..509d91f 100644 --- a/aJSON.h +++ b/aJSON.h @@ -114,6 +114,7 @@ class aJsonStream : public Print { /* Inherited from class Print. */ virtual size_t write(uint8_t ch); + virtual size_t write(const uint8_t *str, size_t len); /* stream attribute is used only from virtual functions, * therefore an object inheriting aJsonStream may avoid