0

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

4

1 回答 1

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);

演示(点击“Run with JS”并打开控制台)

这假设您不是从一些 JSON 开始,而是从一个 JavaScript 对象开始。如果您真的从 json 开始,请使用o1 = JSON.parse(yourJSON);.

编辑:我现在从你的标签中得到你可能不想使用 javascript。然后我让你或其他用户使用 boost 移植它。我让我的答案,以防万一它有用。

于 2013-05-14T09:54:23.733 回答