mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-16 20:12:16 +02:00
Epic refactoring int progress...
This commit is contained in:
@ -22,6 +22,7 @@ class JsonArrayImpl;
|
|||||||
class JsonArrayIterator;
|
class JsonArrayIterator;
|
||||||
class JsonObjectImpl;
|
class JsonObjectImpl;
|
||||||
class JsonObjectIterator;
|
class JsonObjectIterator;
|
||||||
|
class JsonObjectConstIterator;
|
||||||
class JsonParser;
|
class JsonParser;
|
||||||
class JsonValueImpl;
|
class JsonValueImpl;
|
||||||
class JsonWriter;
|
class JsonWriter;
|
||||||
|
@ -20,8 +20,9 @@ class JsonArrayImpl {
|
|||||||
|
|
||||||
JsonArrayImpl(JsonBuffer *buffer) : _buffer(buffer) {}
|
JsonArrayImpl(JsonBuffer *buffer) : _buffer(buffer) {}
|
||||||
|
|
||||||
value_type operator[](int index) const;
|
int size() const;
|
||||||
|
|
||||||
|
value_type operator[](int index) const;
|
||||||
value_type add();
|
value_type add();
|
||||||
|
|
||||||
JsonArrayImpl *createNestedArray();
|
JsonArrayImpl *createNestedArray();
|
||||||
@ -29,15 +30,15 @@ class JsonArrayImpl {
|
|||||||
|
|
||||||
void writeTo(JsonWriter &writer) const;
|
void writeTo(JsonWriter &writer) const;
|
||||||
|
|
||||||
iterator begin() { return iterator(_firstChild); }
|
iterator begin() { return iterator(_firstNode); }
|
||||||
iterator end() { return iterator(0); }
|
iterator end() { return iterator(0); }
|
||||||
|
|
||||||
const_iterator begin() const { return const_iterator(_firstChild); }
|
const_iterator begin() const { return const_iterator(_firstNode); }
|
||||||
const_iterator end() const { return const_iterator(0); }
|
const_iterator end() const { return const_iterator(0); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
JsonBuffer *_buffer;
|
JsonBuffer *_buffer;
|
||||||
Internals::JsonArrayNode *_firstChild;
|
Internals::JsonArrayNode *_firstNode;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,10 +13,12 @@ namespace Internals {
|
|||||||
|
|
||||||
class JsonArrayIterator {
|
class JsonArrayIterator {
|
||||||
public:
|
public:
|
||||||
explicit JsonArrayIterator(Internals::JsonArrayNode *node) : _node(node) {}
|
explicit JsonArrayIterator(Internals::JsonArrayNode *node) : _node(node) {
|
||||||
|
updateValue();
|
||||||
|
}
|
||||||
|
|
||||||
JsonValueImpl &operator*() const { return _node->value; }
|
JsonValue operator*() const { return _value; }
|
||||||
JsonValueImpl *operator->() { return &_node->value; }
|
JsonValue *operator->() { return &_value; }
|
||||||
|
|
||||||
bool operator==(const JsonArrayIterator &other) const {
|
bool operator==(const JsonArrayIterator &other) const {
|
||||||
return _node == other._node;
|
return _node == other._node;
|
||||||
@ -28,11 +30,15 @@ class JsonArrayIterator {
|
|||||||
|
|
||||||
JsonArrayIterator &operator++() {
|
JsonArrayIterator &operator++() {
|
||||||
_node = _node->next;
|
_node = _node->next;
|
||||||
|
updateValue();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void updateValue() { _value = JsonValue(_node ? &_node->value : NULL); }
|
||||||
|
|
||||||
JsonArrayNode *_node;
|
JsonArrayNode *_node;
|
||||||
|
JsonValue _value;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "../JsonPair.hpp"
|
||||||
#include "JsonObjectNode.hpp"
|
#include "JsonObjectNode.hpp"
|
||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
@ -14,26 +15,26 @@ namespace Internals {
|
|||||||
class JsonObjectConstIterator {
|
class JsonObjectConstIterator {
|
||||||
public:
|
public:
|
||||||
explicit JsonObjectConstIterator(Internals::JsonObjectNode *node)
|
explicit JsonObjectConstIterator(Internals::JsonObjectNode *node)
|
||||||
: _node(node) {}
|
: _pair(node) {}
|
||||||
|
|
||||||
JsonPair operator*() const { return _node->pair; }
|
const JsonPair operator*() const { return _pair; }
|
||||||
JsonPair *operator->() { return &_node->pair; }
|
const JsonPair *operator->() { return &_pair; }
|
||||||
|
|
||||||
bool operator==(const JsonObjectConstIterator &other) const {
|
bool operator==(const JsonObjectConstIterator &other) const {
|
||||||
return _node == other._node;
|
return _pair._node == other._pair._node;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(const JsonObjectConstIterator &other) const {
|
bool operator!=(const JsonObjectConstIterator &other) const {
|
||||||
return _node != other._node;
|
return _pair._node != other._pair._node;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonObjectConstIterator &operator++() {
|
JsonObjectConstIterator &operator++() {
|
||||||
_node = _node->next;
|
_pair._node = _pair._node->next;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
JsonObjectNode *_node;
|
JsonPair _pair;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,27 +19,33 @@ class JsonObjectImpl {
|
|||||||
typedef JsonObjectIterator iterator;
|
typedef JsonObjectIterator iterator;
|
||||||
typedef JsonObjectConstIterator const_iterator;
|
typedef JsonObjectConstIterator const_iterator;
|
||||||
|
|
||||||
JsonObjectImpl(JsonBuffer *buffer) : _buffer(buffer) {}
|
JsonObjectImpl(JsonBuffer *buffer) : _buffer(buffer), _firstNode(NULL) {}
|
||||||
|
|
||||||
JsonValueImpl *operator[](const char *key) { return getOrCreateValueAt(key); }
|
int size() const;
|
||||||
|
|
||||||
|
JsonValueImpl *operator[](const char *key);
|
||||||
void remove(key_type key);
|
void remove(key_type key);
|
||||||
|
|
||||||
JsonArrayImpl *createNestedArray(key_type key);
|
JsonArrayImpl *createNestedArray(key_type key);
|
||||||
JsonObjectImpl *createNestedObject(key_type key);
|
JsonObjectImpl *createNestedObject(key_type key);
|
||||||
|
|
||||||
iterator begin() { return iterator(_firstChild); }
|
iterator begin() { return iterator(_firstNode); }
|
||||||
iterator end() { return iterator(0); }
|
iterator end() { return iterator(0); }
|
||||||
|
|
||||||
const_iterator begin() const { return const_iterator(_firstChild); }
|
const_iterator begin() const { return const_iterator(_firstNode); }
|
||||||
const_iterator end() const { return const_iterator(0); }
|
const_iterator end() const { return const_iterator(0); }
|
||||||
|
|
||||||
|
void writeTo(JsonWriter &writer) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
JsonObjectNode *getNodeAt(key_type key);
|
void addNode(JsonObjectNode *nodeToAdd);
|
||||||
void removeNode(JsonObjectNode *nodeToRemove);
|
void removeNode(JsonObjectNode *nodeToRemove);
|
||||||
JsonValueImpl *getOrCreateValueAt(key_type key);
|
|
||||||
|
JsonObjectNode *getNodeAt(key_type key);
|
||||||
|
JsonObjectNode *getOrCreateNodeAt(key_type key);
|
||||||
|
|
||||||
JsonBuffer *_buffer;
|
JsonBuffer *_buffer;
|
||||||
JsonObjectNode *_firstChild;
|
JsonObjectNode *_firstNode;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,26 +11,26 @@ namespace Internals {
|
|||||||
|
|
||||||
class JsonObjectIterator {
|
class JsonObjectIterator {
|
||||||
public:
|
public:
|
||||||
explicit JsonObjectIterator(Internals::JsonObjectNode *node) : _node(node) {}
|
explicit JsonObjectIterator(Internals::JsonObjectNode *node) : _pair(node) {}
|
||||||
|
|
||||||
JsonPair &operator*() const { return _node->pair; }
|
JsonPair &operator*() { return _pair; }
|
||||||
JsonPair *operator->() { return &_node->pair; }
|
JsonPair *operator->() { return &_pair; }
|
||||||
|
|
||||||
bool operator==(const JsonObjectIterator &other) const {
|
bool operator==(const JsonObjectIterator &other) const {
|
||||||
return _node == other._node;
|
return _pair._node == other._pair._node;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!=(const JsonObjectIterator &other) const {
|
bool operator!=(const JsonObjectIterator &other) const {
|
||||||
return _node != other._node;
|
return _pair._node != other._pair._node;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonObjectIterator &operator++() {
|
JsonObjectIterator &operator++() {
|
||||||
_node = _node->next;
|
_pair._node = _pair._node->next;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
JsonObjectNode *_node;
|
JsonPair _pair;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,14 +6,17 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../JsonPair.hpp"
|
#include "JsonValueImpl.hpp"
|
||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
namespace Internals {
|
namespace Internals {
|
||||||
|
|
||||||
struct JsonObjectNode {
|
struct JsonObjectNode {
|
||||||
|
JsonObjectNode(const char* k) : key(k) {}
|
||||||
|
|
||||||
|
const char* const key;
|
||||||
|
JsonValueImpl value;
|
||||||
JsonObjectNode* next;
|
JsonObjectNode* next;
|
||||||
JsonPair pair;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ class JsonParser {
|
|||||||
|
|
||||||
JsonArray parseArray();
|
JsonArray parseArray();
|
||||||
JsonObject parseObject();
|
JsonObject parseObject();
|
||||||
|
JsonValue parseValue();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool isEnd() { return *_ptr == 0; }
|
bool isEnd() { return *_ptr == 0; }
|
||||||
|
@ -49,28 +49,28 @@ class JsonValueImpl {
|
|||||||
_content.asObject = object;
|
_content.asObject = object;
|
||||||
}
|
}
|
||||||
|
|
||||||
operator bool() const {
|
JsonArrayImpl *asArray() {
|
||||||
return _type == JSON_BOOLEAN ? _content.asBoolean : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
operator char const *() const {
|
|
||||||
return _type == JSON_STRING ? _content.asString : NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
operator double() const {
|
|
||||||
return _type >= JSON_DOUBLE_0_DECIMALS ? _content.asDouble : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
operator long() const { return _type == JSON_LONG ? _content.asInteger : 0; }
|
|
||||||
|
|
||||||
operator JsonArrayImpl *() const {
|
|
||||||
return _type == JSON_ARRAY ? _content.asArray : NULL;
|
return _type == JSON_ARRAY ? _content.asArray : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
operator JsonObjectImpl *() const {
|
JsonObjectImpl *asObject() {
|
||||||
return _type == JSON_OBJECT ? _content.asObject : NULL;
|
return _type == JSON_OBJECT ? _content.asObject : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool asBool() const {
|
||||||
|
return _type == JSON_BOOLEAN ? _content.asBoolean : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *asString() const {
|
||||||
|
return _type == JSON_STRING ? _content.asString : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
double asDouble() const {
|
||||||
|
return _type >= JSON_DOUBLE_0_DECIMALS ? _content.asDouble : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
long asLong() const { return _type == JSON_LONG ? _content.asInteger : 0; }
|
||||||
|
|
||||||
void writeTo(JsonWriter &writer) const;
|
void writeTo(JsonWriter &writer) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -6,11 +6,11 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "JsonContainer.hpp"
|
#include "JsonPrintable.hpp"
|
||||||
#include "Internals/JsonArrayImpl.hpp"
|
#include "Internals/JsonArrayImpl.hpp"
|
||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
class JsonArray : public JsonContainer {
|
class JsonArray : public JsonPrintable {
|
||||||
friend class JsonValue;
|
friend class JsonValue;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -21,8 +21,11 @@ class JsonArray : public JsonContainer {
|
|||||||
JsonArray() {}
|
JsonArray() {}
|
||||||
JsonArray(Internals::JsonArrayImpl* impl) : _impl(impl) {}
|
JsonArray(Internals::JsonArrayImpl* impl) : _impl(impl) {}
|
||||||
|
|
||||||
value_type operator[](int index) const;
|
bool success() const { return _impl; }
|
||||||
|
|
||||||
|
int size() const { return _impl ? _impl->size() : 0; }
|
||||||
|
|
||||||
|
value_type operator[](int index) const;
|
||||||
value_type add();
|
value_type add();
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@ -47,7 +50,12 @@ class JsonArray : public JsonContainer {
|
|||||||
}
|
}
|
||||||
const_iterator end() const { return const_iterator(0); }
|
const_iterator end() const { return const_iterator(0); }
|
||||||
|
|
||||||
static JsonArray null() { return JsonArray(NULL); }
|
bool operator==(const JsonArray& other) const { return _impl == other._impl; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void writeTo(Internals::JsonWriter& writer) const {
|
||||||
|
if (_impl) _impl->writeTo(writer);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Internals::JsonArrayImpl* _impl;
|
Internals::JsonArrayImpl* _impl;
|
||||||
|
@ -6,11 +6,11 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "JsonContainer.hpp"
|
#include "JsonPrintable.hpp"
|
||||||
#include "Internals/JsonObjectImpl.hpp"
|
#include "Internals/JsonObjectImpl.hpp"
|
||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
class JsonObject : public JsonContainer {
|
class JsonObject : public JsonPrintable {
|
||||||
friend class JsonValue;
|
friend class JsonValue;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -19,10 +19,17 @@ class JsonObject : public JsonContainer {
|
|||||||
typedef Internals::JsonObjectIterator iterator;
|
typedef Internals::JsonObjectIterator iterator;
|
||||||
typedef Internals::JsonObjectConstIterator const_iterator;
|
typedef Internals::JsonObjectConstIterator const_iterator;
|
||||||
|
|
||||||
|
JsonObject() : _impl(NULL) {}
|
||||||
JsonObject(Internals::JsonObjectImpl* impl) : _impl(impl) {}
|
JsonObject(Internals::JsonObjectImpl* impl) : _impl(impl) {}
|
||||||
|
|
||||||
|
bool success() const { return _impl; }
|
||||||
|
|
||||||
|
int size() const { return _impl ? _impl->size() : 0; }
|
||||||
|
|
||||||
JsonValue operator[](key_type key);
|
JsonValue operator[](key_type key);
|
||||||
void remove(key_type key);
|
void remove(key_type key) {
|
||||||
|
if (_impl) _impl->remove(key);
|
||||||
|
}
|
||||||
|
|
||||||
JsonArray createNestedArray(key_type key);
|
JsonArray createNestedArray(key_type key);
|
||||||
JsonObject createNestedObject(key_type key);
|
JsonObject createNestedObject(key_type key);
|
||||||
@ -39,6 +46,15 @@ class JsonObject : public JsonContainer {
|
|||||||
}
|
}
|
||||||
const_iterator end() const { return const_iterator(0); }
|
const_iterator end() const { return const_iterator(0); }
|
||||||
|
|
||||||
|
bool operator==(const JsonObject& other) const {
|
||||||
|
return _impl == other._impl;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void writeTo(Internals::JsonWriter& writer) const {
|
||||||
|
if (_impl) _impl->writeTo(writer);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Internals::JsonObjectImpl* _impl;
|
Internals::JsonObjectImpl* _impl;
|
||||||
};
|
};
|
||||||
|
@ -7,17 +7,20 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "JsonValue.hpp"
|
#include "JsonValue.hpp"
|
||||||
|
#include "Internals/JsonObjectNode.hpp"
|
||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
class JsonPair {
|
class JsonPair {
|
||||||
public:
|
friend class Internals::JsonObjectIterator;
|
||||||
JsonPair(const char *k) : _key(k) {}
|
friend class Internals::JsonObjectConstIterator;
|
||||||
|
|
||||||
const char *key() const { return _key; }
|
public:
|
||||||
JsonValue &value() { return _value; }
|
JsonPair(Internals::JsonObjectNode *node) : _node(node) {}
|
||||||
|
|
||||||
|
const char *key() const { return _node->key; }
|
||||||
|
JsonValue value() { return JsonValue(&_node->value); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const char *_key;
|
Internals::JsonObjectNode *_node;
|
||||||
JsonValue _value;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -6,13 +6,12 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "ForwardDeclarations.hpp"
|
||||||
#include "Arduino/Printable.hpp"
|
#include "Arduino/Printable.hpp"
|
||||||
#include "Internals/IndentedPrint.hpp"
|
|
||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
|
|
||||||
// TODO: renale to JsonPrintable
|
class JsonPrintable : public Printable {
|
||||||
class JsonContainer : public Printable {
|
|
||||||
public:
|
public:
|
||||||
size_t printTo(char *buffer, size_t bufferSize) const;
|
size_t printTo(char *buffer, size_t bufferSize) const;
|
||||||
virtual size_t printTo(Print &print) const;
|
virtual size_t printTo(Print &print) const;
|
||||||
@ -20,5 +19,8 @@ class JsonContainer : public Printable {
|
|||||||
size_t prettyPrintTo(char *buffer, size_t bufferSize) const;
|
size_t prettyPrintTo(char *buffer, size_t bufferSize) const;
|
||||||
size_t prettyPrintTo(Internals::IndentedPrint &print) const;
|
size_t prettyPrintTo(Internals::IndentedPrint &print) const;
|
||||||
size_t prettyPrintTo(Print &print) const;
|
size_t prettyPrintTo(Print &print) const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void writeTo(Internals::JsonWriter &) const = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -18,35 +18,51 @@ class JsonValue {
|
|||||||
JsonValue() : _impl(NULL) {}
|
JsonValue() : _impl(NULL) {}
|
||||||
JsonValue(Internals::JsonValueImpl *impl) : _impl(impl) {}
|
JsonValue(Internals::JsonValueImpl *impl) : _impl(impl) {}
|
||||||
|
|
||||||
template <typename T>
|
void set(const char *value) {
|
||||||
void operator=(T value) {
|
|
||||||
if (_impl) _impl->set(value);
|
if (_impl) _impl->set(value);
|
||||||
}
|
}
|
||||||
|
void set(bool value) {
|
||||||
void operator=(JsonArray array);
|
if (_impl) _impl->set(value);
|
||||||
void operator=(JsonObject object);
|
}
|
||||||
|
void set(double value, int decimals = 2) {
|
||||||
void set(double value, int decimals) {
|
|
||||||
if (_impl) _impl->set(value, decimals);
|
if (_impl) _impl->set(value, decimals);
|
||||||
}
|
}
|
||||||
|
void set(int value) {
|
||||||
|
if (_impl) _impl->set(static_cast<long>(value));
|
||||||
|
}
|
||||||
|
void set(long value) {
|
||||||
|
if (_impl) _impl->set(value);
|
||||||
|
}
|
||||||
|
void set(JsonObject object);
|
||||||
|
void set(JsonArray array);
|
||||||
|
|
||||||
|
operator bool() const { return _impl ? _impl->asBool() : false; }
|
||||||
|
operator int() const { return _impl ? _impl->asLong() : 0; }
|
||||||
|
operator long() const { return _impl ? _impl->asLong() : 0; }
|
||||||
|
operator double() const { return _impl ? _impl->asDouble() : 0.0; }
|
||||||
|
operator const char *() const {
|
||||||
|
return _impl ? _impl->asString() : static_cast<char *>(NULL);
|
||||||
|
}
|
||||||
|
operator JsonArray();
|
||||||
|
operator JsonObject();
|
||||||
|
|
||||||
|
bool success() { return _impl; }
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
JsonValue operator=(T value) {
|
||||||
|
set(value);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T as() {
|
T as() {
|
||||||
return static_cast<T>(*this);
|
return static_cast<T>(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
operator bool() const { return _impl ? *_impl : false; }
|
protected:
|
||||||
operator int() const { return _impl ? *_impl : 0; }
|
virtual void writeTo(Internals::JsonWriter &writer) const {
|
||||||
operator long() const { return _impl ? *_impl : 0; }
|
if (_impl) _impl->writeTo(writer);
|
||||||
operator double() const { return _impl ? *_impl : 0.0; }
|
|
||||||
operator const char *() const {
|
|
||||||
return _impl ? *_impl : static_cast<char *>(NULL);
|
|
||||||
}
|
}
|
||||||
operator JsonArray() const;
|
|
||||||
|
|
||||||
bool success() { return _impl; }
|
|
||||||
|
|
||||||
static JsonValue null() { return JsonValue(NULL); }
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Internals::JsonValueImpl *_impl;
|
Internals::JsonValueImpl *_impl;
|
||||||
|
@ -22,14 +22,15 @@ class StaticJsonBuffer : public JsonBuffer {
|
|||||||
int size() { return _size; }
|
int size() { return _size; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void *allocateNode() {
|
virtual void* alloc(size_t size) {
|
||||||
if (_size >= CAPACITY) return 0;
|
if (_size + size > CAPACITY) return NULL;
|
||||||
|
void* p = &_buffer[_size];
|
||||||
return &_buffer[_size++];
|
_size += size;
|
||||||
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Internals::JsonNode _buffer[CAPACITY];
|
char _buffer[CAPACITY];
|
||||||
int _size;
|
int _size;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,14 @@
|
|||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
using namespace ArduinoJson::Internals;
|
using namespace ArduinoJson::Internals;
|
||||||
|
|
||||||
|
int JsonArrayImpl::size() const {
|
||||||
|
int nodeCount = 0;
|
||||||
|
for (JsonArrayNode *node = _firstNode; node; node = node->next) nodeCount++;
|
||||||
|
return nodeCount;
|
||||||
|
}
|
||||||
|
|
||||||
JsonValueImpl *JsonArrayImpl::operator[](int index) const {
|
JsonValueImpl *JsonArrayImpl::operator[](int index) const {
|
||||||
JsonArrayNode *node = _firstChild;
|
JsonArrayNode *node = _firstNode;
|
||||||
while (node && index--) node = node->next;
|
while (node && index--) node = node->next;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -50,7 +56,7 @@ JsonObjectImpl *JsonArrayImpl::createNestedObject() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void JsonArrayImpl::writeTo(JsonWriter &writer) const {
|
void JsonArrayImpl::writeTo(JsonWriter &writer) const {
|
||||||
JsonArrayNode *child = _firstChild;
|
JsonArrayNode *child = _firstNode;
|
||||||
|
|
||||||
if (child) {
|
if (child) {
|
||||||
writer.beginArray();
|
writer.beginArray();
|
||||||
|
@ -11,102 +11,95 @@
|
|||||||
#include "ArduinoJson/JsonBuffer.hpp"
|
#include "ArduinoJson/JsonBuffer.hpp"
|
||||||
#include "ArduinoJson/Internals/JsonArrayImpl.hpp"
|
#include "ArduinoJson/Internals/JsonArrayImpl.hpp"
|
||||||
#include "ArduinoJson/Internals/JsonValueImpl.hpp"
|
#include "ArduinoJson/Internals/JsonValueImpl.hpp"
|
||||||
|
#include "ArduinoJson/Internals/JsonWriter.hpp"
|
||||||
#include "ArduinoJson/Internals/StringBuilder.hpp"
|
#include "ArduinoJson/Internals/StringBuilder.hpp"
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
using namespace ArduinoJson::Internals;
|
using namespace ArduinoJson::Internals;
|
||||||
|
|
||||||
|
int JsonObjectImpl::size() const {
|
||||||
|
int nodeCount = 0;
|
||||||
|
for (JsonObjectNode *node = _firstNode; node; node = node->next) nodeCount++;
|
||||||
|
return nodeCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonValueImpl *JsonObjectImpl::operator[](const char *key) {
|
||||||
|
JsonObjectNode *node = getOrCreateNodeAt(key);
|
||||||
|
return node ? &node->value : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void JsonObjectImpl::remove(char const *key) { removeNode(getNodeAt(key)); }
|
void JsonObjectImpl::remove(char const *key) { removeNode(getNodeAt(key)); }
|
||||||
|
|
||||||
JsonArrayImpl *JsonObjectImpl::createNestedArray(char const *key) {
|
JsonArrayImpl *JsonObjectImpl::createNestedArray(char const *key) {
|
||||||
JsonValueImpl *node = getOrCreateValueAt(key);
|
JsonObjectNode *node = getOrCreateNodeAt(key);
|
||||||
if (!node) return NULL;
|
if (!node) return NULL;
|
||||||
|
|
||||||
JsonArrayImpl *array = new (_buffer) JsonArrayImpl(_buffer);
|
JsonArrayImpl *array = new (_buffer) JsonArrayImpl(_buffer);
|
||||||
node->set(array);
|
node->value.set(array);
|
||||||
|
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonObject JsonObject::createNestedObject(char const *key) {
|
JsonObjectImpl *JsonObjectImpl::createNestedObject(const char *key) {
|
||||||
JsonNode *node = getOrCreateValueAt(key);
|
JsonObjectNode *node = getOrCreateNodeAt(key);
|
||||||
|
if (!node) return NULL;
|
||||||
|
|
||||||
if (node) node->setAsObject(_node->getContainerBuffer());
|
JsonObjectImpl *object = new (_buffer) JsonObjectImpl(_buffer);
|
||||||
|
node->value.set(object);
|
||||||
|
|
||||||
return JsonObject(node);
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonNode *JsonObject::getPairAt(const char *key) {
|
JsonObjectNode *JsonObjectImpl::getNodeAt(const char *key) {
|
||||||
for (JsonNode *node = firstChild(); node; node = node->next) {
|
for (JsonObjectNode *node = _firstNode; node; node = node->next) {
|
||||||
if (!strcmp(node->getAsObjectKey(), key)) return node;
|
if (!strcmp(node->key, key)) return node;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonNode *JsonObject::getOrCreateValueAt(const char *key) {
|
JsonObjectNode *JsonObjectImpl::getOrCreateNodeAt(const char *key) {
|
||||||
JsonNode *existingNode = getPairAt(key);
|
JsonObjectNode *existingNode = getNodeAt(key);
|
||||||
if (existingNode) return existingNode->getAsObjectValue();
|
if (existingNode) return existingNode;
|
||||||
|
|
||||||
JsonNode *newValueNode = createNode();
|
JsonObjectNode *newNode = new (_buffer) JsonObjectNode(key);
|
||||||
if (!newValueNode) return 0;
|
|
||||||
|
|
||||||
JsonNode *newKeyNode = createNode();
|
if (newNode) addNode(newNode);
|
||||||
if (!newKeyNode) return 0;
|
|
||||||
|
|
||||||
newKeyNode->setAsObjectKeyValue(key, newValueNode);
|
return newNode;
|
||||||
|
|
||||||
addChild(newKeyNode);
|
|
||||||
|
|
||||||
return newValueNode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonNode::addChild(JsonNode *childToAdd) {
|
void JsonObjectImpl::addNode(JsonObjectNode *nodeToAdd) {
|
||||||
if (type == JSON_PROXY) return content.asProxy.target->addChild(childToAdd);
|
if (!_firstNode) {
|
||||||
|
_firstNode = nodeToAdd;
|
||||||
if (type != JSON_ARRAY && type != JSON_OBJECT) return;
|
} else {
|
||||||
|
JsonObjectNode *lastNode = _firstNode;
|
||||||
JsonNode *lastChild = content.asContainer.child;
|
while (lastNode->next) lastNode = lastNode->next;
|
||||||
|
lastNode->next = nodeToAdd;
|
||||||
if (!lastChild) {
|
|
||||||
content.asContainer.child = childToAdd;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (lastChild->next) lastChild = lastChild->next;
|
|
||||||
|
|
||||||
lastChild->next = childToAdd;
|
|
||||||
}
|
|
||||||
|
|
||||||
void JsonNode::removeChild(JsonNode *childToRemove) {
|
|
||||||
if (type == JSON_PROXY)
|
|
||||||
return content.asProxy.target->removeChild(childToRemove);
|
|
||||||
|
|
||||||
if (type != JSON_ARRAY && type != JSON_OBJECT) return;
|
|
||||||
|
|
||||||
if (content.asContainer.child == childToRemove) {
|
|
||||||
content.asContainer.child = childToRemove->next;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (JsonNode *child = content.asContainer.child; child;
|
|
||||||
child = child->next) {
|
|
||||||
if (child->next == childToRemove) child->next = childToRemove->next;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonObjectImpl::writeObjectTo(JsonWriter &writer) {
|
void JsonObjectImpl::removeNode(JsonObjectNode *nodeToRemove) {
|
||||||
JsonObjectNode *child = _firstChild;
|
if (nodeToRemove == _firstNode) {
|
||||||
|
_firstNode = nodeToRemove->next;
|
||||||
|
} else {
|
||||||
|
for (JsonObjectNode *node = _firstNode; node; node = node->next)
|
||||||
|
if (node->next == nodeToRemove) node->next = nodeToRemove->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (child) {
|
void JsonObjectImpl::writeTo(JsonWriter &writer) const {
|
||||||
|
JsonObjectNode *node = _firstNode;
|
||||||
|
|
||||||
|
if (node) {
|
||||||
writer.beginObject();
|
writer.beginObject();
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
writer.writeString(child->content.asKeyValue.key);
|
writer.writeString(node->key);
|
||||||
writer.writeColon();
|
writer.writeColon();
|
||||||
child->value->writeTo(writer);
|
node->value.writeTo(writer);
|
||||||
|
|
||||||
child = child->next;
|
node = node->next;
|
||||||
if (!child) break;
|
if (!node) break;
|
||||||
|
|
||||||
writer.writeComma();
|
writer.writeComma();
|
||||||
}
|
}
|
||||||
|
@ -70,9 +70,6 @@ void JsonParser::parseValueTo(JsonValue destination) {
|
|||||||
case '\"':
|
case '\"':
|
||||||
destination = parseString();
|
destination = parseString();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
|
||||||
destination = NULL; // invalid JSON
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,8 +139,7 @@ JsonObject JsonParser::parseObject() {
|
|||||||
const char *key = parseString();
|
const char *key = parseString();
|
||||||
if (!key) return NULL;
|
if (!key) return NULL;
|
||||||
|
|
||||||
if (!skip(':'))
|
if (!skip(':')) return NULL;
|
||||||
return NULL;
|
|
||||||
|
|
||||||
JsonValue value = object[key];
|
JsonValue value = object[key];
|
||||||
|
|
||||||
@ -159,3 +155,9 @@ JsonObject JsonParser::parseObject() {
|
|||||||
const char *JsonParser::parseString() {
|
const char *JsonParser::parseString() {
|
||||||
return QuotedString::extractFrom(_ptr, &_ptr);
|
return QuotedString::extractFrom(_ptr, &_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JsonValue JsonParser::parseValue() {
|
||||||
|
JsonValue value = _buffer->createValue();
|
||||||
|
parseValueTo(value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
@ -5,6 +5,11 @@
|
|||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
|
||||||
#include "ArduinoJson/Internals/JsonValueImpl.hpp"
|
#include "ArduinoJson/Internals/JsonValueImpl.hpp"
|
||||||
|
#include "ArduinoJson/Internals/JsonArrayImpl.hpp"
|
||||||
|
#include "ArduinoJson/Internals/JsonObjectImpl.hpp"
|
||||||
|
#include "ArduinoJson/Internals/JsonWriter.hpp"
|
||||||
|
|
||||||
|
using namespace ArduinoJson::Internals;
|
||||||
|
|
||||||
void JsonValueImpl::writeTo(JsonWriter &writer) const {
|
void JsonValueImpl::writeTo(JsonWriter &writer) const {
|
||||||
switch (_type) {
|
switch (_type) {
|
||||||
@ -17,19 +22,19 @@ void JsonValueImpl::writeTo(JsonWriter &writer) const {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case JSON_STRING:
|
case JSON_STRING:
|
||||||
writer.writeString(content.asString);
|
writer.writeString(_content.asString);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JSON_LONG:
|
case JSON_LONG:
|
||||||
writer.writeInteger(content.asInteger);
|
writer.writeInteger(_content.asInteger);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JSON_BOOLEAN:
|
case JSON_BOOLEAN:
|
||||||
writer.writeBoolean(content.asBoolean);
|
writer.writeBoolean(_content.asBoolean);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: // >= JSON_DOUBLE_0_DECIMALS
|
default: // >= JSON_DOUBLE_0_DECIMALS
|
||||||
writer.writeDouble(content.asDouble, type - JSON_DOUBLE_0_DECIMALS);
|
writer.writeDouble(_content.asDouble, _type - JSON_DOUBLE_0_DECIMALS);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -11,17 +11,16 @@
|
|||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
using namespace ArduinoJson::Internals;
|
using namespace ArduinoJson::Internals;
|
||||||
|
|
||||||
|
JsonValue JsonArray::add() { return JsonValue(_impl ? _impl->add() : NULL); }
|
||||||
|
|
||||||
JsonValue JsonArray::operator[](int index) const {
|
JsonValue JsonArray::operator[](int index) const {
|
||||||
if (!_impl) return JsonValue::null();
|
return JsonValue(_impl ? (*_impl)[index] : NULL);
|
||||||
return JsonValue((*_impl)[index]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonArray JsonArray::createNestedArray() {
|
JsonArray JsonArray::createNestedArray() {
|
||||||
if (!_impl) return JsonArray::null();
|
return JsonArray(_impl ? _impl->createNestedArray() : NULL);
|
||||||
return JsonArray(_impl->createNestedArray());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonObject JsonArray::createNestedObject() {
|
JsonObject JsonArray::createNestedObject() {
|
||||||
if (!_impl) return JsonObject::null();
|
return JsonObject(_impl ? _impl->createNestedObject() : NULL);
|
||||||
return JsonObject(_impl->createNestedObject()));
|
|
||||||
}
|
}
|
@ -6,6 +6,12 @@
|
|||||||
|
|
||||||
#include "ArduinoJson/JsonBuffer.hpp"
|
#include "ArduinoJson/JsonBuffer.hpp"
|
||||||
|
|
||||||
|
#include "ArduinoJson/JsonArray.hpp"
|
||||||
|
#include "ArduinoJson/Internals/JsonArrayImpl.hpp"
|
||||||
|
#include "ArduinoJson/JsonObject.hpp"
|
||||||
|
#include "ArduinoJson/Internals/JsonObjectImpl.hpp"
|
||||||
|
#include "ArduinoJson/JsonValue.hpp"
|
||||||
|
#include "ArduinoJson/Internals/JsonValueImpl.hpp"
|
||||||
#include "ArduinoJson/Internals/JsonParser.hpp"
|
#include "ArduinoJson/Internals/JsonParser.hpp"
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
@ -13,5 +19,32 @@ using namespace ArduinoJson::Internals;
|
|||||||
|
|
||||||
// TODO: what happens if alloc returns NULL
|
// TODO: what happens if alloc returns NULL
|
||||||
void* operator new(size_t size, ArduinoJson::JsonBuffer* buffer) {
|
void* operator new(size_t size, ArduinoJson::JsonBuffer* buffer) {
|
||||||
return _buffer->alloc(size);
|
return buffer->alloc(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonArray JsonBuffer::createArray() {
|
||||||
|
return JsonArray(new (this) JsonArrayImpl(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonObject JsonBuffer::createObject() {
|
||||||
|
return JsonObject(new (this) JsonObjectImpl(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonValue JsonBuffer::createValue() {
|
||||||
|
return JsonValue(new (this) JsonValueImpl());
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonArray JsonBuffer::parseArray(char* json) {
|
||||||
|
JsonParser parser(this, json);
|
||||||
|
return JsonArray(parser.parseArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonObject JsonBuffer::parseObject(char* json) {
|
||||||
|
JsonParser parser(this, json);
|
||||||
|
return JsonObject(parser.parseObject());
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonValue JsonBuffer::parseValue(char* json) {
|
||||||
|
JsonParser parser(this, json);
|
||||||
|
return JsonValue(parser.parseValue());
|
||||||
}
|
}
|
@ -1,80 +0,0 @@
|
|||||||
// Copyright Benoit Blanchon 2014
|
|
||||||
// MIT License
|
|
||||||
//
|
|
||||||
// Arduino JSON library
|
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
|
||||||
|
|
||||||
#include "ArduinoJson/JsonContainer.hpp"
|
|
||||||
|
|
||||||
#include "ArduinoJson/JsonBuffer.hpp"
|
|
||||||
#include "ArduinoJson/Internals/StringBuilder.hpp"
|
|
||||||
#include "ArduinoJson/Internals/CompactJsonWriter.hpp"
|
|
||||||
#include "ArduinoJson/Internals/PrettyJsonWriter.hpp"
|
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
|
||||||
using namespace ArduinoJson::Internals;
|
|
||||||
|
|
||||||
size_t JsonContainer::printTo(char *buffer, size_t bufferSize) const {
|
|
||||||
StringBuilder sb(buffer, bufferSize);
|
|
||||||
return printTo(sb);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t JsonContainer::printTo(Print &p) const {
|
|
||||||
CompactJsonWriter writer(&p);
|
|
||||||
_node->writeTo(writer);
|
|
||||||
return writer.bytesWritten();
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t JsonContainer::prettyPrintTo(char *buffer, size_t bufferSize) const {
|
|
||||||
StringBuilder sb(buffer, bufferSize);
|
|
||||||
return prettyPrintTo(sb);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t JsonContainer::prettyPrintTo(IndentedPrint &p) const {
|
|
||||||
PrettyJsonWriter writer(&p);
|
|
||||||
_node->writeTo(writer);
|
|
||||||
return writer.bytesWritten();
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t JsonContainer::prettyPrintTo(Print &print) const {
|
|
||||||
IndentedPrint indentedPrint = IndentedPrint(print);
|
|
||||||
return prettyPrintTo(indentedPrint);
|
|
||||||
}
|
|
||||||
|
|
||||||
JsonNode *JsonContainer::createNode() {
|
|
||||||
if (!_node) return 0;
|
|
||||||
|
|
||||||
JsonBuffer *buffer = _node->getContainerBuffer();
|
|
||||||
if (!buffer) return 0;
|
|
||||||
|
|
||||||
return buffer->createNode();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool JsonContainer::operator==(const JsonContainer &other) const {
|
|
||||||
if (_node == other._node) return true;
|
|
||||||
if (!_node || !other._node) return false;
|
|
||||||
return _node->getProxyTarget() == other._node->getProxyTarget();
|
|
||||||
}
|
|
||||||
|
|
||||||
void JsonContainer::addChild(JsonNode *childToAdd) {
|
|
||||||
if (_node) _node->addChild(childToAdd);
|
|
||||||
}
|
|
||||||
|
|
||||||
void JsonContainer::removeChild(JsonNode *childToRemove) {
|
|
||||||
if (_node) _node->removeChild(childToRemove);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t JsonContainer::size() const {
|
|
||||||
int n = 0;
|
|
||||||
|
|
||||||
for (JsonNodeIterator it = beginChildren(); it != endChildren(); ++it) {
|
|
||||||
n++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
JsonNode* JsonContainer::firstChild() const
|
|
||||||
{
|
|
||||||
return _node ? _node->getContainerChild() : 0;
|
|
||||||
}
|
|
@ -4,7 +4,9 @@
|
|||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
|
||||||
|
#include "ArduinoJson/JsonArray.hpp"
|
||||||
#include "ArduinoJson/JsonObject.hpp"
|
#include "ArduinoJson/JsonObject.hpp"
|
||||||
|
#include "ArduinoJson/JsonValue.hpp"
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
|
|
||||||
|
42
src/JsonPrintable.cpp
Normal file
42
src/JsonPrintable.cpp
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// Copyright Benoit Blanchon 2014
|
||||||
|
// MIT License
|
||||||
|
//
|
||||||
|
// Arduino JSON library
|
||||||
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
|
||||||
|
#include "ArduinoJson/JsonPrintable.hpp"
|
||||||
|
|
||||||
|
#include "ArduinoJson/JsonBuffer.hpp"
|
||||||
|
#include "ArduinoJson/Internals/StringBuilder.hpp"
|
||||||
|
#include "ArduinoJson/Internals/CompactJsonWriter.hpp"
|
||||||
|
#include "ArduinoJson/Internals/PrettyJsonWriter.hpp"
|
||||||
|
|
||||||
|
using namespace ArduinoJson;
|
||||||
|
using namespace ArduinoJson::Internals;
|
||||||
|
|
||||||
|
size_t JsonPrintable::printTo(char *buffer, size_t bufferSize) const {
|
||||||
|
StringBuilder sb(buffer, bufferSize);
|
||||||
|
return printTo(sb);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t JsonPrintable::printTo(Print &p) const {
|
||||||
|
CompactJsonWriter writer(&p);
|
||||||
|
writeTo(writer);
|
||||||
|
return writer.bytesWritten();
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t JsonPrintable::prettyPrintTo(char *buffer, size_t bufferSize) const {
|
||||||
|
StringBuilder sb(buffer, bufferSize);
|
||||||
|
return prettyPrintTo(sb);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t JsonPrintable::prettyPrintTo(IndentedPrint &p) const {
|
||||||
|
PrettyJsonWriter writer(&p);
|
||||||
|
writeTo(writer);
|
||||||
|
return writer.bytesWritten();
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t JsonPrintable::prettyPrintTo(Print &print) const {
|
||||||
|
IndentedPrint indentedPrint = IndentedPrint(print);
|
||||||
|
return prettyPrintTo(indentedPrint);
|
||||||
|
}
|
@ -4,25 +4,24 @@
|
|||||||
// Arduino JSON library
|
// Arduino JSON library
|
||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
|
||||||
#include "ArduinoJson/JsonValue.hpp"
|
|
||||||
|
|
||||||
#include "ArduinoJson/JsonArray.hpp"
|
#include "ArduinoJson/JsonArray.hpp"
|
||||||
#include "ArduinoJson/JsonObject.hpp"
|
#include "ArduinoJson/JsonObject.hpp"
|
||||||
|
#include "ArduinoJson/JsonValue.hpp"
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
|
|
||||||
JsonValue::operator JsonArray() const {
|
JsonValue::operator JsonArray() {
|
||||||
return _impl ? JsonArray(*_impl) : JsonArray();
|
return JsonArray(_impl ? _impl->asArray() : NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonValue::operator JsonObject() const {
|
JsonValue::operator JsonObject() {
|
||||||
return _impl ? JsonObject(*_impl) : JsonObject();
|
return JsonObject(_impl ? _impl->asObject() : NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonValue::operator=(JsonArray array) {
|
void JsonValue::set(JsonArray array) {
|
||||||
if (_impl) _impl->set(array._impl);
|
if (_impl) _impl->set(array._impl);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonValue::operator=(JsonObject object) {
|
void JsonValue::set(JsonObject object) {
|
||||||
if (_impl) _impl->set(object._impl);
|
if (_impl) _impl->set(object._impl);
|
||||||
}
|
}
|
@ -30,7 +30,7 @@ class Issue10 : public testing::Test {
|
|||||||
persons[1] = employee;
|
persons[1] = employee;
|
||||||
}
|
}
|
||||||
|
|
||||||
void checkJsonString(JsonContainer &p) {
|
void checkJsonString(JsonPrintable &p) {
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
p.printTo(buffer, sizeof(buffer));
|
p.printTo(buffer, sizeof(buffer));
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
||||||
#include <ArduinoJson/JsonValue.hpp>
|
#include <ArduinoJson/JsonValue.hpp>
|
||||||
|
#include <ArduinoJson/JsonArray.hpp>
|
||||||
|
#include <ArduinoJson/JsonObject.hpp>
|
||||||
#include "Printers.hpp"
|
#include "Printers.hpp"
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
#include <ArduinoJson/JsonArray.hpp>
|
||||||
|
#include <ArduinoJson/JsonObject.hpp>
|
||||||
#include <ArduinoJson/JsonValue.hpp>
|
#include <ArduinoJson/JsonValue.hpp>
|
||||||
|
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
||||||
#include "Printers.hpp"
|
#include "Printers.hpp"
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
#include <ArduinoJson/JsonArray.hpp>
|
||||||
#include <ArduinoJson/JsonObject.hpp>
|
#include <ArduinoJson/JsonObject.hpp>
|
||||||
#include <ArduinoJson/JsonValue.hpp>
|
#include <ArduinoJson/JsonValue.hpp>
|
||||||
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
||||||
|
@ -5,8 +5,9 @@
|
|||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
#include <ArduinoJson/JsonArray.hpp>
|
||||||
#include <ArduinoJson/JsonValue.hpp>
|
#include <ArduinoJson/JsonValue.hpp>
|
||||||
|
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
#include <ArduinoJson/JsonArray.hpp>
|
||||||
|
#include <ArduinoJson/JsonObject.hpp>
|
||||||
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
||||||
|
#include <ArduinoJson/JsonObject.hpp>
|
||||||
#include <ArduinoJson/JsonValue.hpp>
|
#include <ArduinoJson/JsonValue.hpp>
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
||||||
|
#include <ArduinoJson/JsonArray.hpp>
|
||||||
|
#include <ArduinoJson/JsonObject.hpp>
|
||||||
#include <ArduinoJson/JsonValue.hpp>
|
#include <ArduinoJson/JsonValue.hpp>
|
||||||
#include "Printers.hpp"
|
#include "Printers.hpp"
|
||||||
|
|
||||||
|
@ -5,8 +5,9 @@
|
|||||||
// https://github.com/bblanchon/ArduinoJson
|
// https://github.com/bblanchon/ArduinoJson
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
#include <ArduinoJson/JsonObject.hpp>
|
||||||
#include <ArduinoJson/JsonValue.hpp>
|
#include <ArduinoJson/JsonValue.hpp>
|
||||||
|
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user