2012-01-08 34 views
10

Tôi đang lập kế hoạch sử dụng các đường dẫn vật chất trong MongoDB để biểu diễn một cây và cần chuyển đổi các đường dẫn vật chất trở lại thành cây JSON.Tạo một cây JSON từ các đường dẫn vật chất

ví dụ: // Materialized đường

var input = [ 
    {"id": "0", "path": "javascript" }, 
    {"id": "1", "path": "javascript/database" }, 
    {"id": "2", "path": "javascript/database/tree" }, 
    {"id": "3", "path": "javascript/mvc" }, 
    {"id": "4", "path": "javascript/mvc/knockout.js"}, 
    {"id": "5", "path": "javascript/mvc/backbone.js"}, 
    {"id": "6", "path": "c++" }, 
    {"id": "7", "path": "c++/c0xx"}, 
    {"id": "8", "path": "c++/c0xx/lambda expressions"}, 
    {"id": "9", "path": "c++/c0xx/vc10" } 
]; 

Kết quả sẽ là:

[ 
    { 
     "id": "0", 
     "name": "javascript", 
     "children": [ 
      { 
       "id": "1", 
       "name": "database", 
       "children": [ 
        { 
         "id": "2", 
         "name": "tree", 
         "children": [] 
        } 
       ] 
      }, 
      { 
       "id": "3", 
       "name": "mvc", 
       "children": [ 
        { 
         "id": "4", 
         "name": "knockout.js", 
         "children": [] 
        }, 
        { 
         "id": "5", 
         "name": "backbone.js", 
         "children": [] 
        } 
       ] 
      } 
     ] 
    }, 
    { 
     "id": "6", 
     "name": "c++", 
     "children": [ 
      { 
       "id": "7", 
       "name": "c0xx", 
       "children": [ 
        { 
         "id": "8", 
         "name": "lambda expressions", 
         "children": [] 
        }, 
        { 
         "id": "9", 
         "name": "vc10", 
         "children": [] 
        } 
       ] 
      } 
     ] 
    } 
] 

tôi thấy Convert delimited string into hierarchical JSON with JQuery mà hoạt động tốt.

Và tôi cũng tìm thấy Build tree from materialized path được viết bằng Ruby và sử dụng đệ quy. Tôi quan tâm và tò mò để xem điều này được thực hiện trong Javascript và tự hỏi liệu có bất kỳ folks được thông thạo trong cả Ruby và Javascript, những người muốn viết lại nó. Tôi đã thử một trình chuyển đổi Ruby sang JS, nhưng kết quả là không thể hiểu được.

Cảm ơn, Neville

Trả lời

3
var Comment = new Schema({ 
    date  : { 
     type  : Date, 
     default  : Date.now 
    }, 
    event: ObjectId, 
    body  : String, 
    pathComment : String, 
    user: Array 
}) 
Comment.virtual('level').get(function() { 
    return this.pathComment.split(',').length; 
}); 

Comment.find({event: event.id}).sort({pathComment:1}).exec(function(err, comment){ 

      var collectComment = function(comment){ 
       return { 
        body: comment.body, 
        event: comment.event, 
        pathComment: comment.pathComment, 
        id: comment._id, 
        level: comment.level, 
        user: comment.user[0], 
        date: comment.date, 
        comments: [] 
       }; 

      } 
      var tplComment = []; 

      var createChildComment = function(comment, currentNode, level){ 

       if(level==1){ 
        comment.push(collectComment(currentNode)); 
       }else{ 
        createChildComment(comment[comment.length-1]['comments'], currentNode,level-1); 
       } 
       return; 

      } 

      for(var k in comment){ 
       createChildComment(tplComment, comment[k],comment[k].level); 
      } 
}); 
+1

Cảm ơn. Tôi đã kết thúc bằng cách sử dụng mã từ http://stackoverflow.com/questions/6232753/convert-delimited-string-into-hierarchical-json-with-jquery hoạt động tốt cho các nhu cầu của tôi. Một số bình luận về cách thức hoạt động của mã sẽ được chào đón nhiều nhất. – nevf

Các vấn đề liên quan