mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-09-25 22:40:56 +02:00
JsonSerializer: use iterators to serialize array and objects
This commit is contained in:
@@ -22,17 +22,14 @@ class JsonSerializer : public VariantDataVisitor<size_t> {
|
|||||||
size_t visitArray(const VariantImpl& array) {
|
size_t visitArray(const VariantImpl& array) {
|
||||||
write('[');
|
write('[');
|
||||||
|
|
||||||
auto slotId = array.head();
|
bool first = true;
|
||||||
|
|
||||||
while (slotId != NULL_SLOT) {
|
for (auto it = array.createIterator(); !it.done(); it.move()) {
|
||||||
auto slot = resources_->getVariant(slotId);
|
if (!first)
|
||||||
|
|
||||||
VariantImpl(slot, resources_).accept(*this);
|
|
||||||
|
|
||||||
slotId = slot->next;
|
|
||||||
|
|
||||||
if (slotId != NULL_SLOT)
|
|
||||||
write(',');
|
write(',');
|
||||||
|
|
||||||
|
it->accept(*this);
|
||||||
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
write(']');
|
write(']');
|
||||||
@@ -42,20 +39,19 @@ class JsonSerializer : public VariantDataVisitor<size_t> {
|
|||||||
size_t visitObject(const VariantImpl& object) {
|
size_t visitObject(const VariantImpl& object) {
|
||||||
write('{');
|
write('{');
|
||||||
|
|
||||||
auto slotId = object.head();
|
bool first = true;
|
||||||
|
bool isValue = false;
|
||||||
|
|
||||||
bool isKey = true;
|
for (auto it = object.createIterator(); !it.done(); it.move()) {
|
||||||
|
if (isValue)
|
||||||
|
write(':');
|
||||||
|
else if (!first)
|
||||||
|
write(',');
|
||||||
|
|
||||||
while (slotId != NULL_SLOT) {
|
it->accept(*this);
|
||||||
auto slot = resources_->getVariant(slotId);
|
|
||||||
VariantImpl(slot, resources_).accept(*this);
|
|
||||||
|
|
||||||
slotId = slot->next;
|
first = false;
|
||||||
|
isValue = !isValue;
|
||||||
if (slotId != NULL_SLOT)
|
|
||||||
write(isKey ? ':' : ',');
|
|
||||||
|
|
||||||
isKey = !isKey;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
write('}');
|
write('}');
|
||||||
|
Reference in New Issue
Block a user