{
"menu":
{
"foo": true,
"bar": "true",
"value": 102.3E+06,
"popup":
[
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
]
}
}
如何获得onclick的值?
答案 0 :(得分:16)
遍历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()
N.B。从示例中删除尾随逗号:
{"value": "Open", "onclick": "OpenDoc()"},
您无法使用单个get<string>(path)
或get_child(path)
来访问阵列的特定子项。 The manual says:
根据路径,每个级别的结果可能不完全确定,即如果多次出现相同的键,则未指定选择哪个子级。即使存在此路径的后代,这也可能导致路径无法解析。例如:
a -> b -> c
-> b
如果“b”的分辨率选择第一个这样的节点,则路径“a.b.c”将成功,但如果选择第二个节点则失败。
JSON数组的元素都有空字符串作为名称。您可以使用
访问数组元素的onclick
值
void print_arbitrary_onclick_value(const ptree& node)
{
std::cout << node.get<std::string>("menu.popup..onclick") << "\n";
}
但您不知道尝试访问onclick
的元素。