AsyncJson: add option to init with root as json array

ref: https://github.com/bblanchon/ArduinoJson/issues/272
This commit is contained in:
Me No Dev
2016-05-02 19:54:37 +03:00
parent 59732a09bd
commit d74a84455f

View File

@@ -8,19 +8,19 @@
server.on("/json", HTTP_ANY, [](AsyncWebServerRequest * request) { server.on("/json", HTTP_ANY, [](AsyncWebServerRequest * request) {
AsyncJsonResponse * response = new AsyncJsonResponse(); AsyncJsonResponse * response = new AsyncJsonResponse();
JsonObject& root = response->getRoot(); JsonObject& root = response->getRoot();
root["key1"] = "key number one"; root["key1"] = "key number one";
JsonObject& nested = root.createNestedObject("nested"); JsonObject& nested = root.createNestedObject("nested");
nested["key1"] = "key number one"; nested["key1"] = "key number one";
response->setLength(); response->setLength();
request->send(response); request->send(response);
}); });
*/ */
#ifndef ASYNC_JSON_H_ #ifndef ASYNC_JSON_H_
#define ASYNC_JSON_H_ #define ASYNC_JSON_H_
#include <ArduinoJson.h> #include <ArduinoJson.h>
/* /*
* Json Response * Json Response
@@ -39,40 +39,42 @@ class ChunkPrint : public Print {
size_t write(uint8_t c){ size_t write(uint8_t c){
if (_to_skip > 0) { if (_to_skip > 0) {
_to_skip--; _to_skip--;
return 1; return 1;
} else if (_to_write > 0) { } else if (_to_write > 0) {
_to_write--; _to_write--;
_destination[_pos++] = c; _destination[_pos++] = c;
return 1; return 1;
} }
return 0; return 0;
} }
}; };
class AsyncJsonResponse: public AsyncAbstractResponse { class AsyncJsonResponse: public AsyncAbstractResponse {
private: private:
DynamicJsonBuffer _jsonBuffer; DynamicJsonBuffer _jsonBuffer;
JsonVariant _root; JsonVariant _root;
bool _isValid; bool _isValid;
public: public:
AsyncJsonResponse(): _isValid{false} { AsyncJsonResponse(bool isArray): _isValid{false} {
_code = 200; _code = 200;
_contentType = "text/json"; _contentType = "text/json";
_root = _jsonBuffer.createObject(); if(isArray)
_root = _jsonBuffer.createArray();
else
_root = _jsonBuffer.createObject();
} }
~AsyncJsonResponse() {} ~AsyncJsonResponse() {}
JsonVariant & getRoot() { return _root; } JsonVariant & getRoot() { return _root; }
bool _sourceValid() { return _isValid; } bool _sourceValid() { return _isValid; }
void setLength() { void setLength() {
_contentLength = _root.measureLength(); _contentLength = _root.measureLength();
if (_contentLength) { _isValid = true; } if (_contentLength) { _isValid = true; }
} }
size_t _fillBuffer(uint8_t *data, size_t len){ size_t _fillBuffer(uint8_t *data, size_t len){
ChunkPrint dest(data, _sentLength, len); ChunkPrint dest(data, _sentLength, len);
_root.printTo( dest ) ; _root.printTo( dest ) ;
return len; return len;
} }
}; };
#endif #endif