mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-16 12:02:14 +02:00
Added JsonVariant
as an input type for deserializeXxx()
This commit is contained in:
@ -9,6 +9,8 @@ HEAD
|
|||||||
* Visual Studio: fixed error C2766 with flag `/Zc:__cplusplus` (issue #1250)
|
* Visual Studio: fixed error C2766 with flag `/Zc:__cplusplus` (issue #1250)
|
||||||
* Added support for `JsonDocument` to `copyArray()` (issue #1255)
|
* Added support for `JsonDocument` to `copyArray()` (issue #1255)
|
||||||
* Added support for `enum`s in `as<T>()` and `is<T>()` (issue #1256)
|
* Added support for `enum`s in `as<T>()` and `is<T>()` (issue #1256)
|
||||||
|
* Added `JsonVariant` as an input type for `deserializeXxx()`
|
||||||
|
For example, you can do: `deserializeJson(doc2, doc1["payload"])`
|
||||||
|
|
||||||
v6.15.1 (2020-04-08)
|
v6.15.1 (2020-04-08)
|
||||||
-------
|
-------
|
||||||
|
@ -126,3 +126,57 @@ TEST_CASE("deserializeJson(CustomReader)") {
|
|||||||
REQUIRE(doc[0] == 4);
|
REQUIRE(doc[0] == 4);
|
||||||
REQUIRE(doc[1] == 2);
|
REQUIRE(doc[1] == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("deserializeJson(JsonDocument&, MemberProxy)") {
|
||||||
|
DynamicJsonDocument doc1(4096);
|
||||||
|
doc1["payload"] = "[4,2]";
|
||||||
|
|
||||||
|
DynamicJsonDocument doc2(4096);
|
||||||
|
DeserializationError err = deserializeJson(doc2, doc1["payload"]);
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(doc2.size() == 2);
|
||||||
|
REQUIRE(doc2[0] == 4);
|
||||||
|
REQUIRE(doc2[1] == 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("deserializeJson(JsonDocument&, JsonVariant)") {
|
||||||
|
DynamicJsonDocument doc1(4096);
|
||||||
|
doc1["payload"] = "[4,2]";
|
||||||
|
|
||||||
|
DynamicJsonDocument doc2(4096);
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc2, doc1["payload"].as<JsonVariant>());
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(doc2.size() == 2);
|
||||||
|
REQUIRE(doc2[0] == 4);
|
||||||
|
REQUIRE(doc2[1] == 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("deserializeJson(JsonDocument&, JsonVariantConst)") {
|
||||||
|
DynamicJsonDocument doc1(4096);
|
||||||
|
doc1["payload"] = "[4,2]";
|
||||||
|
|
||||||
|
DynamicJsonDocument doc2(4096);
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc2, doc1["payload"].as<JsonVariantConst>());
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(doc2.size() == 2);
|
||||||
|
REQUIRE(doc2[0] == 4);
|
||||||
|
REQUIRE(doc2[1] == 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("deserializeJson(JsonDocument&, ElementProxy)") {
|
||||||
|
DynamicJsonDocument doc1(4096);
|
||||||
|
doc1[0] = "[4,2]";
|
||||||
|
|
||||||
|
DynamicJsonDocument doc2(4096);
|
||||||
|
DeserializationError err = deserializeJson(doc2, doc1[0]);
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(doc2.size() == 2);
|
||||||
|
REQUIRE(doc2[0] == 4);
|
||||||
|
REQUIRE(doc2[1] == 2);
|
||||||
|
}
|
||||||
|
@ -37,6 +37,7 @@ struct BoundedReader {
|
|||||||
|
|
||||||
#include <ArduinoJson/Deserialization/Readers/IteratorReader.hpp>
|
#include <ArduinoJson/Deserialization/Readers/IteratorReader.hpp>
|
||||||
#include <ArduinoJson/Deserialization/Readers/RamReader.hpp>
|
#include <ArduinoJson/Deserialization/Readers/RamReader.hpp>
|
||||||
|
#include <ArduinoJson/Deserialization/Readers/VariantReader.hpp>
|
||||||
|
|
||||||
#if ARDUINOJSON_ENABLE_ARDUINO_STREAM
|
#if ARDUINOJSON_ENABLE_ARDUINO_STREAM
|
||||||
#include <ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp>
|
#include <ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp>
|
||||||
|
34
src/ArduinoJson/Deserialization/Readers/VariantReader.hpp
Normal file
34
src/ArduinoJson/Deserialization/Readers/VariantReader.hpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
// ArduinoJson - arduinojson.org
|
||||||
|
// Copyright Benoit Blanchon 2014-2020
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <ArduinoJson/Object/MemberProxy.hpp>
|
||||||
|
#include <ArduinoJson/Variant/VariantRef.hpp>
|
||||||
|
|
||||||
|
namespace ARDUINOJSON_NAMESPACE {
|
||||||
|
|
||||||
|
template <typename TArray>
|
||||||
|
struct Reader<ElementProxy<TArray>, void> : Reader<char*, void> {
|
||||||
|
explicit Reader(const ElementProxy<TArray>& x)
|
||||||
|
: Reader<char*, void>(x.template as<const char*>()) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename TObject, typename TStringRef>
|
||||||
|
struct Reader<MemberProxy<TObject, TStringRef>, void> : Reader<char*, void> {
|
||||||
|
explicit Reader(const MemberProxy<TObject, TStringRef>& x)
|
||||||
|
: Reader<char*, void>(x.template as<const char*>()) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct Reader<VariantRef, void> : Reader<char*, void> {
|
||||||
|
explicit Reader(VariantRef x) : Reader<char*, void>(x.as<const char*>()) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct Reader<VariantConstRef, void> : Reader<char*, void> {
|
||||||
|
explicit Reader(VariantConstRef x)
|
||||||
|
: Reader<char*, void>(x.as<const char*>()) {}
|
||||||
|
};
|
||||||
|
} // namespace ARDUINOJSON_NAMESPACE
|
@ -7,6 +7,8 @@
|
|||||||
#include <ArduinoJson/Configuration.hpp>
|
#include <ArduinoJson/Configuration.hpp>
|
||||||
#include <ArduinoJson/Operators/VariantOperators.hpp>
|
#include <ArduinoJson/Operators/VariantOperators.hpp>
|
||||||
#include <ArduinoJson/Polyfills/type_traits.hpp>
|
#include <ArduinoJson/Polyfills/type_traits.hpp>
|
||||||
|
#include <ArduinoJson/Variant/VariantRef.hpp>
|
||||||
|
#include <ArduinoJson/Variant/VariantTo.hpp>
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
|
@ -4,10 +4,17 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ArduinoJson/Variant/VariantRef.hpp>
|
#include <ArduinoJson/Configuration.hpp>
|
||||||
|
#include <ArduinoJson/Misc/Visitable.hpp>
|
||||||
|
#include <ArduinoJson/Numbers/Float.hpp>
|
||||||
|
#include <ArduinoJson/Numbers/Integer.hpp>
|
||||||
|
#include <ArduinoJson/Polyfills/type_traits.hpp>
|
||||||
|
#include <ArduinoJson/Strings/IsString.hpp>
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE {
|
namespace ARDUINOJSON_NAMESPACE {
|
||||||
|
|
||||||
|
class CollectionData;
|
||||||
|
|
||||||
template <typename T, typename Enable = void>
|
template <typename T, typename Enable = void>
|
||||||
struct Comparer;
|
struct Comparer;
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ArduinoJson/Strings/IsWriteableString.hpp>
|
#include <ArduinoJson/Strings/IsWriteableString.hpp>
|
||||||
|
#include <ArduinoJson/Variant/VariantData.hpp>
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE {
|
namespace ARDUINOJSON_NAMESPACE {
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <ArduinoJson/Polyfills/attributes.hpp>
|
||||||
#include <ArduinoJson/Variant/VariantData.hpp>
|
#include <ArduinoJson/Variant/VariantData.hpp>
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE {
|
namespace ARDUINOJSON_NAMESPACE {
|
||||||
|
Reference in New Issue
Block a user