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);
82 commonParseObj(obj, varPath);
87 errString = excp.
what();
93 Poco::Checksum crcCalc(Poco::Checksum::TYPE_CRC32);
94 crcCalc.update(toJsonPath(varPath));
95 std::map<unsigned int, Poco::Dynamic::Var>::iterator it;
96 if((it = globalMap.find(crcCalc.checksum())) != globalMap.end())
98 if(!((*it).second.isEmpty()))
100 if((*it).second.type() ==
typeid(Poco::JSON::Object::Ptr))
102 localObj = (*it).second.extract<Poco::JSON::Object::Ptr>();
104 else if((*it).second.type() ==
typeid(Poco::JSON::Array::Ptr))
106 localArray = (*it).second.extract<Poco::JSON::Array::Ptr>();
110 localVar = (*it).second;
124 commonParsePrepareObj(obj, varPath);
130 commonParseSelectType(obj, varPath);
136 commonParseSelectType(obj, varPath);
142 commonParseSelectType(obj, varPath);
148 commonParseSelectType(obj, varPath);
149 return (localVar.isEmpty() ?
false :
true);
154 commonParseSelectType(obj, varPath);
155 return (localObj.isNull() ?
false :
true);
160 commonParseSelectType(obj, varPath);
161 return (localArray.isNull() ?
false :
true);