用于创建JSON对象的Javascript递归

Men*_*ual 3 javascript

需要一些关于如何正确递归地做这些建议的建议.

基本上我正在做的是进入一堆文本并将其作为JSON返回.

例如:

文本:

q
b
name:rawr
Run Code Online (Sandbox Code Playgroud)

返回:

[
  "q",
  "b",
  {
    "name": "rawr"
  }
]
Run Code Online (Sandbox Code Playgroud)

以下输入:

q
b
name:rawr:awesome
Run Code Online (Sandbox Code Playgroud)

会返回(输出格式不重要):

[
  "q",
  "b",
  {
    "name": {
        "rawr": "awesome"
    }
  }
]
Run Code Online (Sandbox Code Playgroud)

如何修改以下代码以允许以递归方式在对象中包含对象.

var jsonify = function(input){
  var listItems = input, myArray = [], end = [], i, item;

  var items = listItems.split('\r\n');

  // Loop through all the items
  for(i = 0; i < items.length; i++){

    item = items[i].split(':');

    // If there is a value, then split it to create an object
    if(item[1] !== undefined){
      var obj = {};
      obj[item[0]] = item[1];  
      end.push(obj);
    }
    else{
      end.push(item[0]);
    }
  }

  // return the results
  return end;
};
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 7

我不认为递归是正确的方法,循环也可以这样做:

var itemparts = items[i].split(':');

var value = itemparts.pop();
while (itemparts.length) {
    var obj = {};
    obj[itemparts.pop()] = value;
    value = obj;
}
end.push(value);
Run Code Online (Sandbox Code Playgroud)

当然,由于递归和循环具有相同的可能性,您可以使用递归函数执行相同的操作:

function recurse(parts) {
    if (parts.length == 1)
        return parts[0];
    // else
    var obj = {};
    obj[parts.shift()] = recurse(parts);
    return obj;
}
end.push(recurse(items[i].split(':')));
Run Code Online (Sandbox Code Playgroud)