diff --git a/CHANGELOG.md b/CHANGELOG.md index e2c659b9..9b1a4224 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ HEAD ---- * Made library easier to use from a CMake project: simply add_subdirectory(ArduinoJson/src) +* Changed `String` to be a `typedef` of `std::string` (issues #142 and #161) + +**BREAKING CHANGES**: +- `JsonVariant(true).as()` now returns `"true"` instead of `"1"` +- `JsonVariant(false).as()` now returns `"false"` instead of `"0"` v5.0.6 ------ diff --git a/include/ArduinoJson/Arduino/String.hpp b/include/ArduinoJson/Arduino/String.hpp index 45904deb..8c1b9a57 100644 --- a/include/ArduinoJson/Arduino/String.hpp +++ b/include/ArduinoJson/Arduino/String.hpp @@ -9,16 +9,7 @@ #ifndef ARDUINO #include - -// This class reproduces Arduino's String class -class String : public std::string { - public: - String(const char *cstr = "") : std::string(cstr) {} - String(const String &str) : std::string(str) {} - explicit String(long); - explicit String(int); - explicit String(double, unsigned char decimalPlaces = 2); -}; +typedef std::string String; #else diff --git a/src/Arduino/String.cpp b/src/Arduino/String.cpp deleted file mode 100644 index def11c6f..00000000 --- a/src/Arduino/String.cpp +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright Benoit Blanchon 2014-2015 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson - -#ifndef ARDUINO - -#include "../../include/ArduinoJson/Arduino/String.hpp" - -#include // for sprintf() - -String::String(double value, unsigned char digits) { - char tmp[32]; - sprintf(tmp, "%.*f", digits, value); - *this = tmp; -} - -String::String(long value) { - char tmp[32]; - sprintf(tmp, "%ld", value); - *this = tmp; -} - -String::String(int value) { - char tmp[32]; - sprintf(tmp, "%d", value); - *this = tmp; -} - -#endif diff --git a/src/JsonVariant.cpp b/src/JsonVariant.cpp index 375e2096..4b4cb0dc 100644 --- a/src/JsonVariant.cpp +++ b/src/JsonVariant.cpp @@ -76,20 +76,12 @@ JsonInteger JsonVariant::asInteger() const { template <> String JsonVariant::as() const { + String s; if ((_type == JSON_STRING || _type == JSON_UNPARSED) && _content.asString != NULL) - return String(_content.asString); - - if (_type == JSON_INTEGER || _type == JSON_BOOLEAN) - return String(_content.asInteger); - - if (_type >= JSON_FLOAT_0_DECIMALS) { - uint8_t decimals = static_cast(_type - JSON_FLOAT_0_DECIMALS); - return String(_content.asFloat, decimals); - } - - String s; - printTo(s); + s = _content.asString; + else + printTo(s); return s; } diff --git a/test/JsonVariant_As_Tests.cpp b/test/JsonVariant_As_Tests.cpp index fda2396e..e4278514 100644 --- a/test/JsonVariant_As_Tests.cpp +++ b/test/JsonVariant_As_Tests.cpp @@ -57,7 +57,7 @@ TEST(JsonVariant_As_Tests, FalseAsLong) { TEST(JsonVariant_As_Tests, FalseAsString) { JsonVariant variant = false; - ASSERT_EQ(String("0"), variant.as()); + ASSERT_EQ(String("false"), variant.as()); } TEST(JsonVariant_As_Tests, TrueAsBool) { @@ -77,7 +77,7 @@ TEST(JsonVariant_As_Tests, TrueAsLong) { TEST(JsonVariant_As_Tests, TrueAsString) { JsonVariant variant = true; - ASSERT_EQ(String("1"), variant.as()); + ASSERT_EQ(String("true"), variant.as()); } TEST(JsonVariant_As_Tests, LongAsBool) {