forked from bblanchon/ArduinoJson
Parse empty object
This commit is contained in:
@ -162,6 +162,11 @@ namespace ArduinoJson
|
||||
return type == JSON_ARRAY;
|
||||
}
|
||||
|
||||
bool isObject()
|
||||
{
|
||||
return type == JSON_OBJECT;
|
||||
}
|
||||
|
||||
void addChild(JsonNode* childToAdd);
|
||||
|
||||
void removeChild(JsonNode* childToRemove);
|
||||
|
@ -33,6 +33,8 @@ namespace ArduinoJson
|
||||
inline bool isEnd();
|
||||
inline bool isLong();
|
||||
inline bool isNull();
|
||||
inline bool isObjectStop();
|
||||
inline bool isObjectStart();
|
||||
inline bool isSpace();
|
||||
|
||||
inline void skipOneChar();
|
||||
@ -42,6 +44,7 @@ namespace ArduinoJson
|
||||
inline JsonNode* parseBoolean();
|
||||
inline JsonNode* parseLong();
|
||||
inline JsonNode* parseNull();
|
||||
inline JsonNode* parseObject();
|
||||
inline JsonNode* parseString();
|
||||
|
||||
JsonNode *parseDouble();
|
||||
|
@ -32,8 +32,8 @@ namespace ArduinoJson
|
||||
JsonValue createValue();
|
||||
|
||||
JsonArray parseArray(char* json);
|
||||
|
||||
JsonValue parseValue(char* json);
|
||||
JsonObject parseObject(char* json);
|
||||
JsonValue parseValue(char* json); // TODO: remove
|
||||
|
||||
protected:
|
||||
virtual void* allocateNode() = 0;
|
||||
|
@ -23,6 +23,11 @@ namespace ArduinoJson
|
||||
JsonArray createNestedArray(const char* key);
|
||||
JsonObject createNestedObject(const char* key);
|
||||
|
||||
bool success()
|
||||
{
|
||||
return _node && _node->isObject();
|
||||
}
|
||||
|
||||
private:
|
||||
Internals::JsonNode* getOrCreateNodeAt(const char* key);
|
||||
};
|
||||
|
@ -165,4 +165,5 @@ void JsonNode::duplicate(JsonNode* other)
|
||||
{
|
||||
*this = *other;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,16 @@ bool JsonParser::isArrayStop()
|
||||
return *_ptr == ']';
|
||||
}
|
||||
|
||||
bool JsonParser::isObjectStart()
|
||||
{
|
||||
return *_ptr == '{';
|
||||
}
|
||||
|
||||
bool JsonParser::isObjectStop()
|
||||
{
|
||||
return *_ptr == '}';
|
||||
}
|
||||
|
||||
bool JsonParser::isBoolean()
|
||||
{
|
||||
return *_ptr == 't' || *_ptr == 'f';
|
||||
@ -104,13 +114,15 @@ JsonNode* JsonParser::parseAnything()
|
||||
if (isNull())
|
||||
return parseNull();
|
||||
|
||||
if (isObjectStart())
|
||||
return parseObject();
|
||||
|
||||
return parseString();
|
||||
}
|
||||
|
||||
JsonNode* JsonParser::parseArray()
|
||||
{
|
||||
JsonNode* node = _buffer->createNode();
|
||||
node->setAsArray(_buffer);
|
||||
JsonNode* node = _buffer->createArrayNode();
|
||||
|
||||
skipOneChar(); // skip the '['
|
||||
skipSpaces();
|
||||
@ -137,6 +149,12 @@ JsonNode* JsonParser::parseArray()
|
||||
}
|
||||
}
|
||||
|
||||
JsonNode* JsonParser::parseObject()
|
||||
{
|
||||
_ptr+=2;
|
||||
return _buffer->createObjectNode();
|
||||
}
|
||||
|
||||
JsonNode *JsonParser::parseBoolean()
|
||||
{
|
||||
bool value = *_ptr == 't';
|
||||
@ -168,8 +186,7 @@ JsonNode* JsonParser::parseLong()
|
||||
|
||||
JsonNode* JsonParser::parseNull()
|
||||
{
|
||||
_ptr += 4;
|
||||
// 4 = strlen("null")
|
||||
_ptr += 4; // strlen("null")
|
||||
|
||||
return _buffer->createStringNode(0);
|
||||
}
|
||||
|
@ -28,6 +28,12 @@ JsonArray JsonBuffer::parseArray(char* json)
|
||||
return JsonArray(parser.parseAnything());
|
||||
}
|
||||
|
||||
JsonObject JsonBuffer::parseObject(char* json)
|
||||
{
|
||||
JsonParser parser(this, json);
|
||||
return JsonObject(parser.parseAnything());
|
||||
}
|
||||
|
||||
JsonValue JsonBuffer::parseValue(char* json)
|
||||
{
|
||||
JsonParser parser(this, json);
|
||||
|
20
test/JsonParser_Object_Tests.cpp
Normal file
20
test/JsonParser_Object_Tests.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <ArduinoJson/StaticJsonBuffer.hpp>
|
||||
|
||||
using namespace ArduinoJson;
|
||||
|
||||
class JsonParser_Object_Test : public testing::Test
|
||||
{
|
||||
protected:
|
||||
|
||||
|
||||
};
|
||||
|
||||
TEST_F(JsonParser_Object_Test, EmptyObject)
|
||||
{
|
||||
StaticJsonBuffer<10> jsonBuffer;
|
||||
char jsonString[] = "{}";
|
||||
JsonObject object = jsonBuffer.parseObject(jsonString);
|
||||
|
||||
EXPECT_TRUE(object.success());
|
||||
}
|
Reference in New Issue
Block a user