2015-12-02 12 views
5

Qual è il modo semplice per ottenere tutti i percorsi nell'oggetto JSON assegnato; Per esempio:Per stampare tutti i percorsi in un oggetto json

{ 
    app:{ 
     profiles:'default' 
    }, 
    application:{ 
     name:'Master Service', 
     id:'server-master' 
    }, 
    server:{ 
     protocol:'http', 
     host:'localhost', 
     port:8098, 
     context:null 
    } 
} 

dovrei grado di produrre la seguente oggetto

app.profiles=default 
application.name=Master Service 
application.id=server-master 

ho potuto ottenere la stessa utilizzando una funzione ricorsiva. Voglio sapere che c'è qualche funzione incorporata da json che fa questo.

+0

La prego quindi di condividere la vostra funzione ricorsiva – shintaroid

risposta

4

È possibile implementare il convertitore personalizzato scorrendo gli oggetti in modo ricorsivo.

Qualcosa di simile a questo:

var YsakON = { // YsakObjectNotation 
    stringify: function(o, prefix) {   
    prefix = prefix || ''; 

    switch (typeof o) 
    { 
     case 'object': 
     if (Array.isArray(o)) 
      return prefix + '=' + JSON.stringify(o) + '\n'; 

     var output = ""; 
     for (var k in o) 
     { 
      if (o.hasOwnProperty(k)) 
      output += this.stringify(o[k], prefix + '.' + k); 
     } 
     return output; 
     case 'function': 
     return ""; 
     default: 
     return prefix + '=' + o + '\n'; 
    } 
    } 
}; 

// Usage: 
YaskON.stringify(obj); 

che non è una migliore implementazione convertitore, solo un esempio di fast-scritta, ma dovrebbe aiutare a capire il principio fondamentale.

Questo è il working JSFiddle demo.

+0

Grazie, stavo controllando è c'è qualche funzione incorporata, per stampare tutti i percorsi disponibili, dal momento che finalmente una struttura ad albero. – Ysak

1

Penso che non ci sia una funzione integrata che faccia questo. Può essere fatto con un semplice ciclo per loop come di seguito nel mio violino. Ma non si occupa della ricorsività. Qui ci sono altri posti che ho trovato per quanto riguarda la stessa: Post1 e Post2 e Post3

var myjson = { 
    app:{ 
     profiles:'default' 
    }, 
    application:{ 
     name:'Master Service', 
     id:'server-master' 
    }, 
    server:{ 
     protocol:'http', 
     host:'localhost', 
     port:8098, 
     context:null 
    } 
}; 

for(key in myjson) { 
    for(k in myjson[key]) { 
    console.log(key + '.' + k + ' = '+ myjson[key][k]); 
    } 
} 

Fiddle

+1

Questa abitudine a risolvere l'obiettivo, perché la sua considerando solo un solo livello, deve essere ricorsiva come data dal Yeldar Kurmangaliyev – Ysak

+0

Sì :) Ive ha aggiornato la risposta – VishwaKumar