mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-16 20:12:16 +02:00
Parse an array with two longs
This commit is contained in:
@ -42,6 +42,11 @@ bool JsonParser::isSpace()
|
|||||||
return *_ptr == ' ' || *_ptr == '\t' || *_ptr == '\n' || *_ptr == '\r';
|
return *_ptr == ' ' || *_ptr == '\t' || *_ptr == '\n' || *_ptr == '\r';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool JsonParser::isComma()
|
||||||
|
{
|
||||||
|
return *_ptr == ',';
|
||||||
|
}
|
||||||
|
|
||||||
void JsonParser::skipOneChar()
|
void JsonParser::skipOneChar()
|
||||||
{
|
{
|
||||||
_ptr++;
|
_ptr++;
|
||||||
@ -52,7 +57,7 @@ void JsonParser::skipSpaces()
|
|||||||
while(isSpace()) skipOneChar();
|
while(isSpace()) skipOneChar();
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonNode* JsonParser::parseNode()
|
JsonNode* JsonParser::parseAnything()
|
||||||
{
|
{
|
||||||
skipSpaces();
|
skipSpaces();
|
||||||
|
|
||||||
@ -67,19 +72,32 @@ JsonNode* JsonParser::parseNode()
|
|||||||
|
|
||||||
JsonNode* JsonParser::parseArray()
|
JsonNode* JsonParser::parseArray()
|
||||||
{
|
{
|
||||||
skipOneChar(); // skip the '['
|
|
||||||
skipSpaces();
|
|
||||||
|
|
||||||
JsonNode* node = _buffer->createNode();
|
JsonNode* node = _buffer->createNode();
|
||||||
node->setAsArray(_buffer);
|
node->setAsArray(_buffer);
|
||||||
|
|
||||||
|
skipOneChar(); // skip the '['
|
||||||
|
skipSpaces();
|
||||||
|
|
||||||
if (isEnd())
|
if (isEnd())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (isArrayStop())
|
if (isArrayStop())
|
||||||
return node;
|
return node;
|
||||||
|
|
||||||
node->addChild(parseNode());
|
for(;;)
|
||||||
|
{
|
||||||
|
node->addChild(parseAnything());
|
||||||
|
|
||||||
|
skipSpaces();
|
||||||
|
|
||||||
|
if (isArrayStop())
|
||||||
|
return node;
|
||||||
|
|
||||||
|
if (!isComma())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
skipOneChar(); // skip the ','
|
||||||
|
}
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
@ -12,9 +12,8 @@ public:
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonNode* parseNode();
|
JsonNode* parseAnything();
|
||||||
JsonNode* parseArray();
|
|
||||||
JsonNode* parseLong();
|
|
||||||
private:
|
private:
|
||||||
JsonBuffer* _buffer;
|
JsonBuffer* _buffer;
|
||||||
char* _ptr;
|
char* _ptr;
|
||||||
@ -24,6 +23,11 @@ private:
|
|||||||
inline bool isArrayStop();
|
inline bool isArrayStop();
|
||||||
inline bool isLong();
|
inline bool isLong();
|
||||||
inline bool isSpace();
|
inline bool isSpace();
|
||||||
|
inline bool isComma();
|
||||||
|
|
||||||
inline void skipOneChar();
|
inline void skipOneChar();
|
||||||
inline void skipSpaces();
|
inline void skipSpaces();
|
||||||
|
|
||||||
|
inline JsonNode* parseArray();
|
||||||
|
inline JsonNode* parseLong();
|
||||||
};
|
};
|
@ -22,5 +22,5 @@ JsonNode* JsonBuffer::createNode()
|
|||||||
JsonArray JsonBuffer::parseArray(char* json)
|
JsonArray JsonBuffer::parseArray(char* json)
|
||||||
{
|
{
|
||||||
JsonParser parser(this, json);
|
JsonParser parser(this, json);
|
||||||
return JsonArray(parser.parseNode());
|
return JsonArray(parser.parseAnything());
|
||||||
}
|
}
|
@ -48,3 +48,14 @@ TEST_F(JsonArray_Parser_Tests, OneInteger)
|
|||||||
EXPECT_EQ(1, array.size());
|
EXPECT_EQ(1, array.size());
|
||||||
EXPECT_EQ(42, static_cast<int>(array[0]));
|
EXPECT_EQ(42, static_cast<int>(array[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(JsonArray_Parser_Tests, TwoIntegers)
|
||||||
|
{
|
||||||
|
JsonArray array = json.parseArray("[42,84]");
|
||||||
|
|
||||||
|
EXPECT_TRUE(array.success());
|
||||||
|
|
||||||
|
EXPECT_EQ(2, array.size());
|
||||||
|
EXPECT_EQ(42, static_cast<int>(array[0]));
|
||||||
|
EXPECT_EQ(84, static_cast<int>(array[1]));
|
||||||
|
}
|
Reference in New Issue
Block a user