C ++ повышает дерево свойств, получая значения

Последние 2 дня я пытался выяснить, как мне сделать следующее в C ++:

У меня есть строка JSON:

[
{
"pid" : 0,
"nick":"Foo",
"score":12,
"ping":50
},
{
"pid":1,
"nick":"Bar",
"score":23,
"ping":24
}
]

Я хочу перебрать все эти дочерние элементы и поместить, например, значения PlayerID в std::vector так что я могу вернуть их все.

Где я застрял здесь

// some code
boost::property_tree::ptree pt;
boost::property_tree::read_json(ss, pt);

std::vector<int> players;
int pid;
BOOST_FOREACH(boost::property_tree::ptree::value_type &v, pt.get_child("pid")) // I also tried with pt or pt.get_child("")
{
pid = v.second.data();
players.push_back(pid);
}
return players;

Я посмотрел на документацию, но не смог найти ничего хорошего. Кроме того, я попробовал почти все там, и если он скомпилируется без ошибок, он даст мне то, что () ожидаемый объект или что-то в этом роде. Я действительно застрял, любая помощь приветствуется! Заранее спасибо.

3

Решение

Поддержка JSON в PropertyTree не типизирована — data () всегда возвращает строку.

PTree, получаемый при разборе JSON, должен состоять из корневого узла, у которого есть один безымянный дочерний элемент для каждого элемента массива. Каждый из этих детей имеет четырех именованных детей для значений. Код для его повторения должен быть:

namespace bpt = boost::property_tree;
bpt::ptree pt;
bpt::read_json(ss, pt);

std::vector<int> players;
int pid;

BOOST_FOREACH(bpt::value_type& v, pt) { // iterate over immediate children of the root
pid = v.second.get<int>("pid"); // use the converting path getter
players.push_back(pid);
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector