18 #ifndef JSON_JBJ_EXTRACTOR_HPP
19 #define JSON_JBJ_EXTRACTOR_HPP
21 #include <Poco/Checksum.h>
22 #include <Poco/Dynamic/Var.h>
23 #include <Poco/Dynamic/Struct.h>
24 #include <Poco/Environment.h>
25 #include <Poco/JSON/Object.h>
26 #include <Poco/JSON/Array.h>
36 using namespace HCE::exception;
44 std::map<unsigned int, Poco::Dynamic::Var>
globalMap;
46 inline void commonParsePrepareObj(Poco::JSON::Object::Ptr obj, std::vector<Poco::Dynamic::Var> &varPath);
47 void commonParseObj(Poco::JSON::Object::Ptr obj, std::vector<Poco::Dynamic::Var> &varPath)
throw (
JsonObjectExeption);
48 inline void mapExtract(std::vector<Poco::Dynamic::Var> &varPath);
49 inline void commonParseSelectType(Poco::JSON::Object::Ptr obj, std::vector<Poco::Dynamic::Var> &varPath);
50 void generateMapByObj(Poco::JSON::Object::Ptr obj, std::string &name);
51 void generateMapByArray(Poco::JSON::Array::Ptr array, std::string &name);
52 void clearLocalFields();
55 inline Poco::Dynamic::Var getAsVar(Poco::JSON::Object::Ptr obj, std::vector<Poco::Dynamic::Var> &varPath);
56 inline Poco::JSON::Object::Ptr getAsObject(Poco::JSON::Object::Ptr obj, std::vector<Poco::Dynamic::Var> &varPath);
57 inline Poco::JSON::Array::Ptr getAsArray(Poco::JSON::Object::Ptr obj, std::vector<Poco::Dynamic::Var> &varPath);
59 inline bool isVar(Poco::JSON::Object::Ptr obj, std::vector<Poco::Dynamic::Var> &varPath);
60 inline bool isObject(Poco::JSON::Object::Ptr obj, std::vector<Poco::Dynamic::Var> &varPath);
61 inline bool isArray(Poco::JSON::Object::Ptr obj, std::vector<Poco::Dynamic::Var> &varPath);
62 bool isKeyPresent(Poco::JSON::Object::Ptr obj, std::vector<Poco::Dynamic::Var> &varPath);
64 void generateMap(Poco::JSON::Object::Ptr obj, std::string &name);
69 static std::string toJsonPath(std::vector<Poco::Dynamic::Var> &varPath)
throw (
JsonObjectExeption);
83 commonParseObj(obj, varPath);
88 errString = excp.
what();
94 Poco::Checksum crcCalc(Poco::Checksum::TYPE_CRC32);
95 crcCalc.update(toJsonPath(varPath));
96 std::map<unsigned int, Poco::Dynamic::Var>::iterator it;
97 if((it = globalMap.find(crcCalc.checksum())) != globalMap.end())
99 if(!((*it).second.isEmpty()))
101 if((*it).second.type() ==
typeid(Poco::JSON::Object::Ptr))
103 localObj = (*it).second.extract<Poco::JSON::Object::Ptr>();
105 else if((*it).second.type() ==
typeid(Poco::JSON::Array::Ptr))
107 localArray = (*it).second.extract<Poco::JSON::Array::Ptr>();
111 localVar = (*it).second;
125 commonParsePrepareObj(obj, varPath);
131 commonParseSelectType(obj, varPath);
137 commonParseSelectType(obj, varPath);
143 commonParseSelectType(obj, varPath);
149 commonParseSelectType(obj, varPath);
150 return (localVar.isEmpty() ?
false :
true);
155 commonParseSelectType(obj, varPath);
156 return (localObj.isNull() ?
false :
true);
161 commonParseSelectType(obj, varPath);
162 return (localArray.isNull() ?
false :
true);