Parse empty object

This commit is contained in:
Benoit Blanchon
2014-10-21 21:11:30 +02:00
parent 0daf82eee2
commit 9c1b6b80aa
8 changed files with 64 additions and 7 deletions

View File

@ -162,6 +162,11 @@ namespace ArduinoJson
return type == JSON_ARRAY;
}
bool isObject()
{
return type == JSON_OBJECT;
}
void addChild(JsonNode* childToAdd);
void removeChild(JsonNode* childToRemove);

View File

@ -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();

View File

@ -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;

View File

@ -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);
};

View File

@ -165,4 +165,5 @@ void JsonNode::duplicate(JsonNode* other)
{
*this = *other;
}
}
}

View File

@ -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);
}

View File

@ -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);

View 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());
}