2016-04-07 20 views
-1

Bazı JSON verileriyle çalışıyorum ve bir nesneden veri almam ve bir JSON nesnesi oluşturmam gerekiyor.Nesne/dizi içindeki öğeler üzerinde yineleme ve iç içe geçmiş JSON nasıl oluşturulur?

EDITED: Oluşan JSON d3.js (aşağı-oy ve belirgin) kütüphane dolayısıyla garip bir soru

Benim veriler bir API iade edilen grafik ile kullanılmakta olan böyle görünüyor:

var data = [ 
    [ 
     {"id": 1, "key1":"value1", "key2":"value2", "key3":"value3"}, 
     {"id": 2, "key1":"value1", "key2":"value2", "key3":"value3"}, 
     {"id": 3, "key1":"value1", "key2":"value2", "key3":"value3"}, 
     {"id": 4, "key1":"value1", "key2":"value2", "key3":"value3"}, 
     {"id": 5, "key1":"value1", "key2":"value2", "key3":"value3"}, 
     {"id": 6, "key1":"value1", "key2":"value2", "key3":"value3"} 
    ] 
]; 

ve böyle bir önceki içine yuvalanmış her nesneyi olması benim JSON gerekir:

{ 
    "name" : "1", 
    "children" : [ 
    { 
     "name" : "2", 
     "children" : [ 
      { 
       "name" : "3", 
       "children" : [ 
        { 
         "name" : "4", 
         "children" : [ 
          { 
           "name" : "5", 
           "children" : [ 
            { 
             "name" : "6", 
             "children" : [ ] 
            } 
           ] 
          } 
         ] 
        } 
       ] 
      } 
     ] 
    }] 
} 

Ben sadece gösterim amaçlı 6 durdu ettik - Ben somethi ihtiyacım olacağını N nesnelerle çalışabilir. Şu andanesnesini _.each ile değiştiriyorum, ancak yuvalamayı nasıl yapacağımı anlayamıyorum.

Herhangi bir yardım harika olurdu - Teşekkürler! Bu benim ile geldi budur

+0

Bunu yapmak zorundayım çünkü bu tür JSON kullanan bir D3 Ağacı görselleştirmesi yapıyorum –

+0

Ağacınız özyineliyse, yönteminiz gerekir. – Toxantron

+0

Gördüğüm sorun, gerçekten ne sorduğuna dair çok genel bir çözüm olmadığını gösteriyor. Veriler büyük olasılıkla bazı ebeveynleri ve çocukları birbirine bağlayan bir kimliğe sahiptir, sadece 'dizi [n + 1]' 'dizisi [n]' nin bir çocuğu değildir. Bu, nesneyi, N düzeylerini derinlemesine keyfi olarak yerleştirmekten farklı bir işlevi tekrarlayan bir şekilde yapar. Eğer TRULY bu yapının nasılsa, buraya bir şey koyacağım. – cdbajorin

cevap

2

var data = [ [{ "id": 1, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 2, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 3, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 4, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 5, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 6, "key1": "value1", "key2": "value2", "key3": "value3" }] ]; 
 

 
var r = (function rec(d, o, i) { 
 
    if (i == -1) return o; 
 
    var t = {}; 
 
    t.name = d[i].id; 
 
    t.children = []; 
 
    t.children.push(o); 
 
    return rec(d, t, --i); 
 
})(data[0], {}, data[0].length - 1); 
 

 

 
document.write('<pre>' + JSON.stringify(r, 0, 2) + '</pre>');

2

. @isvforall biraz daha hızlıydı, ama benimkini daha çok seviyorum. ;)

var data = [ [{ "id": 1, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 2, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 3, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 4, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 5, "key1": "value1", "key2": "value2", "key3": "value3" }, { "id": 6, "key1": "value1", "key2": "value2", "key3": "value3" }] ]; 
 

 
var result = (function buildTree(input, index) { 
 
    if (index >= input.length) 
 
    return []; 
 

 
    return [ 
 
    { 
 
     name: input[index].id, 
 
     children: buildTree(input, index + 1) 
 
    } 
 
    ]; 
 
})(data[0], 0); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 2) + '</pre>');

Düzenleme: gösteri için @isvforall gelen Eklendi kodu. Çözümlerimiz her ikisi de özyinelemeyi kullanır, biz sadece ağacı farklı şekilde yaparız.

İlgili konular