我想要JSON:
"section" : {
"subsection" : {
"value" : 33,
"add" : "somestring"
},
"subparam" : "hello world"
}
表示为以下boost :: program_options :: variables_map:
"section.subsection.value" = "33"
"section.subsection.add" = "somestring"
"section.subparam" = "hello world"
最简单的方法是什么?现在我递归遍历JSON树并将密钥连接到“key.key.key ....”,将这些字符串添加到variables_map中,但有更简单的方法吗?
答案 0 :(得分:0)
我会这样做:
var o1 = {
"section" : {
"subsection" : {
"value" : 33,
"add" : "somestring"
},
subparam : "hello world"
}
};
var o2 = (function walk(o, path, acc) {
acc = acc || {};
for (var name in o) {
var pd = (path ? path+'.' : '')+name, od = o[name];
if (typeof od === "object") {
walk(od, pd, acc);
} else {
acc[path+'.'+name] = od.toString();
}
}
return acc;
})(o1);
Demonstration(点击“用JS运行”并打开控制台)
这假设您不是从一些JSON开始,而是使用JavaScript对象。如果你真的从json开始,请使用o1 = JSON.parse(yourJSON);
。
编辑:我现在从您的代码中获取您可能不想使用javascript。然后我让你或其他用户使用boost来移植它。我让我的答案,以防它有用。