2011-06-03 25 views
15

ile hiyerarşik JSON'a dönüştürün Çizgi/alt ilişkiyi tire ile ayrılmış olarak tanımlayan bir dizi dizim var. Yani, Bob'un patronu Jim ve Jim'in patronu Fred ise, Bob'un dizideki girişi "Fred-Jim-Bob" ve Jim'in girişi "Fred-Jim" olurdu.Sınırlandırılmış dizeyi JQuery

{ 
    "name": "Fred", 
    "children": { 
     "name": "Jim", 
     "children": { 
      "name": "Bob" 
     } 
    } 
} 

Herhangi bir yardım olacaktır: Ben kadarıyla buna benzer JSON bu değerleri dönüm iyi yolu olarak veri yüzden yardım arıyordu gelen biçimini değiştirmek için yeteneği yok oldukça memnun olarak. Teşekkürler.

+0

giriş dizesinin bir örnek verebilir? ayrıca, sonsuz seviyeleri aşağı mı yoksa 3 ile sınırlı mı? – Jason

+0

Peki, yukarıda gösterilenler gibi bir dizi dizgi olurdu. Yani yukarıda bahsettiğim json için dizi olabilir: var emp = new Array ("Fred-Jim", "Fred", "Fred-Jim-Bob"); ve evet 3'ten daha fazla veya daha az olabilir. – Munzilla

cevap

29
var input = ["Fred-Jim-Bob", "Fred-Jim", "Fred-Thomas-Rob", "Fred"]; 
var output = []; 
for (var i = 0; i < input.length; i++) { 
    var chain = input[i].split("-"); 
    var currentNode = output; 
    for (var j = 0; j < chain.length; j++) { 
     var wantedNode = chain[j]; 
     var lastNode = currentNode; 
     for (var k = 0; k < currentNode.length; k++) { 
      if (currentNode[k].name == wantedNode) { 
       currentNode = currentNode[k].children; 
       break; 
      } 
     } 
     // If we couldn't find an item in this list of children 
     // that has the right name, create one: 
     if (lastNode == currentNode) { 
      var newNode = currentNode[k] = {name: wantedNode, children: []}; 
      currentNode = newNode.children; 
     } 
    } 
} 

çıkış JSONifies olarak:

[{ 
    "name": "Fred", 
    "children": [{ 
     "name": "Jim", 
     "children": [{ 
      "name": "Bob", 
      "children": [] 
     }] 
    }, { 
     "name": "Thomas", 
     "children": [{ 
      "name": "Rob", 
      "children": [] 
     }] 
    }] 
}] 
+0

OP yorumları, sonsuz düzeylerde çalışması gerektiğini söylüyor. –

+1

Örnek giriş, 3 seviyeye kadar çıkabilen dizelere sahip olmakla birlikte, daha fazlasını eklemekten memnuniyet duyarız. Örneği yüklemeyi ve dizelerden birinin "Fred-Jim-Bob-Mark" yazmasını deneyin. Gördüğünüz gibi, iyi çalışıyor. Matematiksel sonsuzluk, muhtemelen işleyemez, ancak tarayıcı belleği söz konusu olduğunda makul sınırlar içinde çalışmalıdır. – Gijs

+0

Evet, bir şirketin kuruluş şeması için verileri ayrıştırmak için kullanıyorum, bu yüzden INFINITE seviyelerine ihtiyacım yok, ancak 3'ten fazla hazırlandı. – Munzilla

İlgili konular