mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-15 19:42:12 +02:00
Added ability to set a nested value like this: root["A"]["B"] = "C"
(issue #352)
This commit is contained in:
@ -4,6 +4,7 @@ ArduinoJson: change log
|
|||||||
HEAD
|
HEAD
|
||||||
----
|
----
|
||||||
|
|
||||||
|
* Added ability to set a nested value like this: `root["A"]["B"] = "C"` (issue #352)
|
||||||
* Renamed `*.ipp` to `*Impl.hpp` because they were ignored by Arduino IDE (issue #396)
|
* Renamed `*.ipp` to `*Impl.hpp` because they were ignored by Arduino IDE (issue #396)
|
||||||
|
|
||||||
v5.7.2
|
v5.7.2
|
||||||
|
@ -67,6 +67,11 @@ inline JsonArraySubscript JsonArray::operator[](size_t index) {
|
|||||||
return JsonArraySubscript(*this, index);
|
return JsonArraySubscript(*this, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename TImplem>
|
||||||
|
inline JsonArraySubscript JsonVariantBase<TImplem>::operator[](int index) {
|
||||||
|
return asArray()[index];
|
||||||
|
}
|
||||||
|
|
||||||
template <typename TImplem>
|
template <typename TImplem>
|
||||||
inline const JsonArraySubscript JsonVariantBase<TImplem>::operator[](
|
inline const JsonArraySubscript JsonVariantBase<TImplem>::operator[](
|
||||||
int index) const {
|
int index) const {
|
||||||
|
@ -71,6 +71,7 @@ class JsonVariantBase : public Internals::JsonPrintable<TImpl> {
|
|||||||
// Returns the element at specified index if the variant is an array.
|
// Returns the element at specified index if the variant is an array.
|
||||||
// Returns JsonVariant::invalid() if the variant is not an array.
|
// Returns JsonVariant::invalid() if the variant is not an array.
|
||||||
FORCE_INLINE const JsonArraySubscript operator[](int index) const;
|
FORCE_INLINE const JsonArraySubscript operator[](int index) const;
|
||||||
|
FORCE_INLINE JsonArraySubscript operator[](int index);
|
||||||
|
|
||||||
// Mimics an object.
|
// Mimics an object.
|
||||||
// Returns the value associated with the specified key if the variant is
|
// Returns the value associated with the specified key if the variant is
|
||||||
@ -83,6 +84,13 @@ class JsonVariantBase : public Internals::JsonPrintable<TImpl> {
|
|||||||
operator[](const TString &key) const {
|
operator[](const TString &key) const {
|
||||||
return asObject()[key];
|
return asObject()[key];
|
||||||
}
|
}
|
||||||
|
template <typename TString>
|
||||||
|
FORCE_INLINE
|
||||||
|
typename TypeTraits::EnableIf<Internals::StringFuncs<TString>::has_equals,
|
||||||
|
JsonObjectSubscript<TString> >::type
|
||||||
|
operator[](const TString &key) {
|
||||||
|
return asObject()[key];
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const TImpl *impl() const {
|
const TImpl *impl() const {
|
||||||
|
@ -59,3 +59,25 @@ TEST_F(JsonVariant_Subscript_Tests, String) {
|
|||||||
EXPECT_FALSE(_variant["0"].success());
|
EXPECT_FALSE(_variant["0"].success());
|
||||||
EXPECT_FALSE(_variant[0].success());
|
EXPECT_FALSE(_variant[0].success());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(JsonVariant_Subscript_Tests, ObjectSetValue) {
|
||||||
|
_variant = _jsonBuffer.createObject();
|
||||||
|
_variant["hello"] = "world";
|
||||||
|
EXPECT_EQ(1, _variant.size());
|
||||||
|
EXPECT_STREQ("world", _variant["hello"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(JsonVariant_Subscript_Tests, ArraySetValue) {
|
||||||
|
_variant = _jsonBuffer.parseArray("[\"hello\"]");
|
||||||
|
_variant[0] = "world";
|
||||||
|
EXPECT_EQ(1, _variant.size());
|
||||||
|
EXPECT_STREQ("world", _variant[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(JsonVariant_Subscript_Tests, NestedObjectSetValue) {
|
||||||
|
_variant = _jsonBuffer.parseArray("[{}]");
|
||||||
|
_variant[0]["hello"] = "world";
|
||||||
|
EXPECT_EQ(1, _variant.size());
|
||||||
|
EXPECT_EQ(1, _variant[0].size());
|
||||||
|
EXPECT_STREQ("world", _variant[0]["hello"]);
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user