Ответ 1
Поддержка JSON, пятнистая с деревом свойств boost.
Набор данных дерева свойств не набирается и не поддерживает массивы как таковые. Таким образом, используется следующее JSON/отображение дерева свойств:
- Объекты JSON сопоставляются с узлами. Каждое свойство является дочерним node.
- Массивы JSON сопоставляются с узлами. Каждый элемент является дочерним node с пустым именем. Если node имеет именованные и неназванные дочерние узлы, он не может быть отображен в представление JSON.
- Значения JSON отображаются на узлы, содержащие это значение. Однако вся информация типа теряется; числа, а также литералы "null", "true" и "false" просто сопоставляются с их строковой формой.
- Узлы дерева свойств, содержащие как дочерние узлы, так и данные, не могут быть отображены.
(из документации)
Вы можете перебирать массив с помощью вспомогательной функции.
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
using boost::property_tree::ptree;
template <typename T>
std::vector<T> as_vector(ptree const& pt, ptree::key_type const& key)
{
std::vector<T> r;
for (auto& item : pt.get_child(key))
r.push_back(item.second.get_value<T>());
return r;
}
int main()
{
std::stringstream ss("{\"a\": [8, 6, 2], \"b\": [2, 2, 1]}");
ptree pt;
read_json(ss, pt);
for (auto i : as_vector<int>(pt, "a")) std::cout << i << ' ';
std::cout << '\n';
for (auto i : as_vector<int>(pt, "b")) std::cout << i << ' ';
}
Смотрите Live On Coliru. Выход:
8 6 2
2 2 1