2015-12-02 49 views
5

獲取給定Json對象中所有路徑的簡單方法是什麼? 例如:打印json對象中的所有路徑

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

我應該能夠產生下列對象

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

我是能夠使用一個遞歸函數來實現相同的。我想知道是否有任何內置函數從JSON這樣做。

+0

請你分享你的遞歸函數 – shintaroid

回答

4

您可以通過對象遞歸迭代實現您的自定義轉換器。

事情是這樣的:

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); 

這不是一個最好的轉換器實現,只是一個快速書面例子,但它應該幫助你瞭解的主要原則。

這裏是working JSFiddle demo

+0

謝謝,我檢查的是有任何內置的函數fron json,打印所有可用的路徑,因爲json最終是一個樹結構。 – Ysak

1

我認爲沒有這樣做的內置函數。它可以通過一個簡單的循環來完成,如下圖所示。但它並不考慮遞歸。下面是我發現的關於同其他職位:Post1Post2Post3

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

這不會解決的目的,因爲它只考慮只有一個級別,它必須遞歸由Yeldar Kurmangaliyev給出 – Ysak

+0

是:)我已更新答案 – VishwaKumar