{
"menu":
{
"foo": true,
"bar": "true",
"value": 102.3E+06,
"popup":
[
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
]
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得onclick的价值?
ant*_*kos 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";
}
}
Run Code Online (Sandbox Code Playgroud)
功能打印:
onclick: CreateNewDoc()
onclick: OpenDoc()
Run Code Online (Sandbox Code Playgroud)
NB从示例中删除尾随逗号:
{"value": "Open", "onclick": "OpenDoc()"},
Run Code Online (Sandbox Code Playgroud)
您无法使用单个get<string>(path)或get_child(path)调用访问阵列的特定子级.手册说:
根据路径,每个级别的结果可能不完全确定,即如果多次出现相同的键,则不指定选择哪个子级.即使存在此路径的后代,这也可能导致路径无法解析.例:
a -> b -> c
-> b
Run Code Online (Sandbox Code Playgroud)
如果"b"的分辨率选择第一个这样的节点,则路径"abc"将成功,但如果选择第二个节点则失败.
JSON数组的元素都具有空字符串作为名称.您可以使用onclick数组元素访问值
void print_arbitrary_onclick_value(const ptree& node)
{
std::cout << node.get<std::string>("menu.popup..onclick") << "\n";
}
Run Code Online (Sandbox Code Playgroud)
但您不知道onclick尝试访问的元素.
| 归档时间: |
|
| 查看次数: |
12613 次 |
| 最近记录: |