26#include <SimoxUtility/algorithm/string/string_tools.h>
38 JPathNavigator::JPathNavigator(
const JsonDataPtr& data) : JPathNavigator(data, -1,
"")
45 return std::dynamic_pointer_cast<JsonArray>(data) != 0;
51 return std::dynamic_pointer_cast<JsonObject>(data) != 0;
57 return std::dynamic_pointer_cast<JsonValue>(data) != 0;
63 JsonValuePtr val = std::dynamic_pointer_cast<JsonValue>(data);
70 JsonValuePtr val = std::dynamic_pointer_cast<JsonValue>(data);
77 JsonValuePtr val = std::dynamic_pointer_cast<JsonValue>(data);
84 JsonValuePtr val = std::dynamic_pointer_cast<JsonValue>(data);
91 JsonValuePtr val = std::dynamic_pointer_cast<JsonValue>(data);
107 throw LocalException(
"JPathNavigator is not valid.");
111 std::vector<JPathNavigator>
115 std::vector<std::string> parts = simox::alg::split(expr,
"/");
116 std::vector<JPathNavigator> result;
117 select(parts, 0, result, limitToOne);
124 std::vector<JPathNavigator> result =
select(expr,
true);
125 return result.size() > 0 ? result.at(0) : JPathNavigator(0);
131 std::vector<JPathNavigator>& result,
132 bool limitToOne)
const
134 if (partIndex >= parts.size())
139 std::string part = parts.at(partIndex);
143 for (
size_t i = 0; i < a->elements.size(); i++)
145 JPathNavigator(a->elements.at(i), i,
"").select(parts, partIndex + 1, result);
146 if (limitToOne && result.size() > 0)
155 for (
const std::pair<std::string, JsonDataPtr>& pair : o->elements)
157 JPathNavigator(pair.second, -1, pair.first).select(parts, partIndex + 1, result);
158 if (limitToOne && result.size() > 0)
170 JPathNavigator(child, -1, part).select(parts, partIndex + 1, result);
191 JsonObjectPtr o = std::dynamic_pointer_cast<JsonObject>(data);
194 throw LocalException(
"Invalid cast");
203 JsonArrayPtr a = std::dynamic_pointer_cast<JsonArray>(data);
206 throw LocalException(
"Invalid cast");
215 JsonValuePtr v = std::dynamic_pointer_cast<JsonValue>(data);
218 throw LocalException(
"Invalid cast");
std::string asString() const
JsonArrayPtr asArray() const
JPathNavigator selectSingleNode(const std::string &expr) const
JsonValuePtr asValue() const
std::vector< JPathNavigator > select(const std::string &expr, bool limitToOne=false) const
bool remove(const std::string &key)
std::string getKey() const
JsonObjectPtr asObject() const
JsonDataPtr getData() const
static bool CheckInt(const std::string &value)
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::shared_ptr< JsonValue > JsonValuePtr
std::shared_ptr< JsonObject > JsonObjectPtr
std::shared_ptr< JsonData > JsonDataPtr
std::shared_ptr< JsonArray > JsonArrayPtr