Как мы уже знаем, мы используем следующий код для разбора json data
std::string jsonString = "{\"aa\":\"bb\"}";
Poco::JSON::Parser parser;
Poco::Dynamic::Var result;
result = parser.parse(jsonString);
Poco::JSON::Object::Ptr pObj = result.extract<Poco::JSON::Object::Ptr>();
... // goes with pObj
Мы знаем "{\" aa \ ": \" bb \ "}" является json объектом, поэтому мы используем result.extract
и следующий код для разбора json данных массива
std::string jsonString = "[{\"aa\":\"bb\"}, {\"cc\":\"dd\"}]";
Poco::JSON::Parser parser;
Poco::Dynamic::Var result;
result = parser.parse(jsonString);
Poco::JSON::Array::Ptr pArr = result.extract<Poco::JSON::Array::Ptr>();
... // goes with pArr
мы знаем "[{\" aa \ ": \" bb \ "}, {\" cc \ ": \" dd \ "}]" , поэтому мы используем result.extract
Итак, моя первая мысль:
...
try {
Poco::JSON::Object::Ptr pObj = result.extract<Poco::JSON::Object::Ptr>(); // this does be a json object
} catch (...) {}
try {
Poco::JSON::Array::Ptr pArr = result.extract<Poco::JSON::Array::Ptr>(); // this does be a json array
} catch (...) {}
...
Затем, используя приведенный выше код с catch для исключения, я могу отличить guish Object от Array.
Итак, есть ли способ решить этот вопрос без catch catch?