Browse Source

Util: Add JSON accessors

master
Riyyi 2 years ago
parent
commit
c385432bb0
  1. 2
      src/util/json/array.h
  2. 4
      src/util/json/parser.cpp
  3. 2
      src/util/json/parser.h
  4. 13
      src/util/json/value.cpp
  5. 4
      src/util/json/value.h

2
src/util/json/array.h

@ -29,6 +29,8 @@ public:
m_values.emplace_back(std::move(value));
}
const std::vector<Value>& values() const { return m_values; }
private:
std::vector<Value> m_values;
};

4
src/util/json/parser.cpp

@ -28,7 +28,7 @@ Parser::~Parser()
// -----------------------------------------
void Parser::parse()
Value Parser::parse()
{
Lexer lexer(m_input);
lexer.analyze();
@ -81,6 +81,8 @@ void Parser::parse()
break;
}
return result;
}
// -----------------------------------------

2
src/util/json/parser.h

@ -24,7 +24,7 @@ public:
Parser(const std::string& input);
virtual ~Parser();
void parse();
Value parse();
private:
Token peek();

13
src/util/json/value.cpp

@ -4,6 +4,7 @@
* SPDX-License-Identifier: MIT
*/
#include <cassert> // assert
#include <string>
#include <utility> // move
@ -64,6 +65,18 @@ Value::Value(const Object& value)
m_value.asObject = new Object(value);
}
Value Value::operator[](size_t index)
{
assert(m_type == Type::Array);
return m_value.asArray->values().at(index);
}
Value Value::operator[](const std::string& key)
{
assert(m_type == Type::Object);
return m_value.asObject->members().at(key);
}
// ------------------------------------------
void Value::clear()

4
src/util/json/value.h

@ -40,6 +40,10 @@ public:
Value(const Array& value);
Value(const Object& value);
// Array index operator
Value operator[](size_t index);
Value operator[](const std::string& key);
bool asBool() const { return m_value.asBool; }
double asDouble() const { return m_value.asDouble; }
const std::string& asString() const { return *m_value.asString; }

Loading…
Cancel
Save