From d74a84455fb1ab83b7d123993bb9292a2ff3f04c Mon Sep 17 00:00:00 2001 From: Me No Dev Date: Mon, 2 May 2016 19:54:37 +0300 Subject: [PATCH] AsyncJson: add option to init with root as json array ref: https://github.com/bblanchon/ArduinoJson/issues/272 --- src/AsyncJson.h | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/AsyncJson.h b/src/AsyncJson.h index d2e7672..37f544d 100644 --- a/src/AsyncJson.h +++ b/src/AsyncJson.h @@ -8,19 +8,19 @@ server.on("/json", HTTP_ANY, [](AsyncWebServerRequest * request) { AsyncJsonResponse * response = new AsyncJsonResponse(); - JsonObject& root = response->getRoot(); + JsonObject& root = response->getRoot(); root["key1"] = "key number one"; - JsonObject& nested = root.createNestedObject("nested"); + JsonObject& nested = root.createNestedObject("nested"); nested["key1"] = "key number one"; response->setLength(); - request->send(response); + request->send(response); }); */ #ifndef ASYNC_JSON_H_ #define ASYNC_JSON_H_ -#include +#include /* * Json Response @@ -39,40 +39,42 @@ class ChunkPrint : public Print { size_t write(uint8_t c){ if (_to_skip > 0) { _to_skip--; - return 1; + return 1; } else if (_to_write > 0) { _to_write--; _destination[_pos++] = c; - return 1; + return 1; } return 0; } }; - + class AsyncJsonResponse: public AsyncAbstractResponse { private: DynamicJsonBuffer _jsonBuffer; JsonVariant _root; - bool _isValid; + bool _isValid; public: - AsyncJsonResponse(): _isValid{false} { + AsyncJsonResponse(bool isArray): _isValid{false} { _code = 200; _contentType = "text/json"; - _root = _jsonBuffer.createObject(); + if(isArray) + _root = _jsonBuffer.createArray(); + else + _root = _jsonBuffer.createObject(); } ~AsyncJsonResponse() {} JsonVariant & getRoot() { return _root; } bool _sourceValid() { return _isValid; } - void setLength() { - + void setLength() { _contentLength = _root.measureLength(); if (_contentLength) { _isValid = true; } } - + size_t _fillBuffer(uint8_t *data, size_t len){ - ChunkPrint dest(data, _sentLength, len); + ChunkPrint dest(data, _sentLength, len); _root.printTo( dest ) ; - return len; + return len; } }; #endif