在Node.js中使用嵌套键将字符串转换为JSON对象的最佳方法是什么?

时间:2013-06-16 20:55:20

标签: json node.js recursion mapping underscore.js

我有以下输入:

  var input = {
    "usa.ca.los": 12345,
    "usa.ca.sfo": 12346,
    "usa.ws.sea": 22333, 
    "others.a.b.c.d.e": 33333
  }

我想把它变成:

 var output = {
     "usa": {
             "ca": {
                     "los": 12345,
                     "sfo": 12346,
                   },
             "ws": {
                     "sea": 22333
                   }
            }
     "others":{"a":{"b":{"c":{"d":{"e":33333}}}}}
 }

我知道我可以使用递归函数并构造输出但似乎工作太多了。

由于我在Node.js中的程序,是否有更简单的方法使用underscore.js?或者其他一些现有功能可以让我正确地进行转换?

1 个答案:

答案 0 :(得分:0)

我不认为这是下划线中的内置函数,但是自己编写一个相当简单的事情:

var input = {
    "usa.ca.los": 12345,
    "usa.ca.sfo": 12346,
    "usa.ws.sea": 22333, 
    "others.a.b.c.d.e": 33333
}

function parse(input){
    var output = {};
    for(var key in input){
        setByString(output, input[key], key);
    }

    return output;
}

function setByString(obj, value, key){
    var split = key.split('.');
    while(split.length){
        key = split.shift();
        if(split.length){
            if(!obj.hasOwnProperty(key)){
                obj[key] = {};
            }
            obj = obj[key];
        } else {
            obj[key] = value;
        }
    }
}

console.log(parse(input));