iterar a través de los hijos del nodo menu.popup
y extraer el onclick
valores:
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";
}
}
Las impresiones de función:
onclick: CreateNewDoc()
onclick: OpenDoc()
N.B. Eliminar la coma final del ejemplo:
{"value": "Open", "onclick": "OpenDoc()"},
No se puede acceder a ellos de forma individual de la matriz mediante un único get<string>(path)
get_child(path)
o llamada. The manual says:
Dependiendo de la ruta de acceso, el resultado en cada nivel no puede ser completamente determinado, es decir, si la misma clave aparece varias veces, lo que niño está elegido no es especificado. Esto puede provocar que la ruta no se resuelva aunque haya un descendiente con esta ruta. Ejemplo:
a -> b -> c
-> b
El camino "A.B.C" tendrá éxito si la resolución de "b" elige el primero tal nodo, pero fallará si elige el segundo.
Los elementos de la matriz JSON tienen todos la cadena vacía como nombre. Se puede acceder al valor onclick
un elemento de matriz con
void print_arbitrary_onclick_value(const ptree& node)
{
std::cout << node.get<std::string>("menu.popup..onclick") << "\n";
}
pero no saber con qué elemento se intenta el acceso de onclick
.
Hay dos cosas llamadas 'onclick'; ¿Cuál de ellos quieres usar? –
Esta es su tercera pregunta hoy en Boost.PropertyTree. Tiene bonita [documentación decente] (http://www.boost.org/doc/libs/1_46_1/doc/html/property_tree.html). Quizás deberías leerlo. –
@Nicol - Irónicamente, el ejemplo del OP es en realidad de la documentación de Boost. http://www.boost.org/doc/libs/1_41_0/doc/html/boost_propertytree/parsers.html#boost_propertytree.parsers.json_parser – Perception