Итерация по дочерним узлам menu.popup
и извлечение значений onclick
:
void print_onclick_values(const ptree& node)
{
BOOST_FOREACH(const ptree::value_type& child,
node.get_child("menu.popup")) {
std::cout
<< "onclick: "
<< child.second.get<std::string>("onclick")
<< "\n";
}
}
Функция печатает:
onclick: CreateNewDoc()
onclick: OpenDoc()
NB Удалите запятую из запятойпример:
{"value": "Open", "onclick": "OpenDoc()"},
Вы не можете получить доступ к определенным дочерним элементам массива, используя один вызов get<string>(path)
или get_child(path)
. В руководстве написано :
В зависимости от пути, результат на каждом уровне может быть не полностью определенным, т. Е. Если один и тот же ключ появляется несколько раз, то выбранный дочерний элемент не являетсяуказано.Это может привести к тому, что путь не будет разрешен, даже если есть путь с этим путем.Пример:
a -> b -> c
-> b
Путь «abc» будет успешным, если разрешение «b» выберет первый такой узел, но потерпит неудачу, если он выберет второй.
Все элементы массива JSON имеют пустую строку в качестве имени.Вы можете получить доступ к onclick
значению элемента массива с помощью
void print_arbitrary_onclick_value(const ptree& node)
{
std::cout << node.get<std::string>("menu.popup..onclick") << "\n";
}
, но вы не знаете, для какого элемента предпринимается попытка доступа к onclick
.