将JSON加载到boost variables_map中

时间:2013-05-14 09:40:44

标签: json boost

我想要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中,但有更简单的方法吗?

1 个答案:

答案 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来移植它。我让我的答案,以防它有用。