in cpp/src/parse.cpp [60:86]
boost::any parse_json(boost::property_tree::ptree pt) {
if (pt.empty()) {
if (pt.data() == "true" || pt.data() == "false") {
return boost::any(pt.get_value<bool>());
} else if (regex_search(pt.data(), regex("^-?\\d+$"))) {
long ln = atol(pt.data().c_str());
if (ln > 2147483647 || ln < -2147483648) {
return boost::any(ln);
} else {
return boost::any(atoi(pt.data().c_str()));
}
} else if (regex_search(pt.data(), regex(R"(^-?\d+\.{1}\d+$)"))) {
return boost::any(atof(pt.data().c_str()));
}
return boost::any(pt.data());
}
vector<boost::any> vec;
map<string, boost::any> m;
for (const auto &it : pt) {
if (!it.first.empty()) {
m[it.first] = parse_json(it.second);
} else {
vec.push_back(parse_json(it.second));
}
}
return vec.empty() ? boost::any(m) : boost::any(vec);
}