2017-06-22 83 views
1
JSON字符串的密鑰和值

我特林JSON字符串解析,看起來像這樣:通過迭代在JavaScript

{ "a": [{ 
    "b": [ 
     ["c"], 
     [] 
    ], "d": [ 
     [], 
     [] 
    ], "e": [ 
     [], 
     ["f"] 
    ], "g": [ 
     [], 
     ["h", "i"] 
    ] 
}] } 

我使用下面的代碼來分析它,並通過按鍵迭代和價值。但是,除了我期望的鍵和值之外,我還會得到一些數字作爲鍵,我猜是那些沒有鍵的索引號。我怎樣才能修改代碼(純JavaScript),以便我只將「a,b,c,d,e,f,g,h,i」作爲鍵和值,而不再是其他內容?

var jsonData = JSON.parse("name"); 
for (var key in jsonData) { 
    if (jsonData.hasOwnProperty(key)) { 
    // do stuff 
    } 
} 
+0

jsonData [ 「一」]會給你的訪問下一級 –

+0

預期的結果是什麼?當你說你想要這些字母*作爲鍵和值時,你並不清楚你要問什麼* – charlietfl

+1

一個數組的「鍵」是代表列表中值的索引的數字。數組中的所有字母實際上都是「值」,而它們是對象中的「鍵」。所以,你需要以不同的方式處理它們。 –

回答

1

下面是一個遞歸解決方案,可以瀏覽數據結構。當參數是一個數組時,它將迭代並遞歸遍歷每個元素;當它是一個對象時,它會輸出每個鍵並遞歸通過每個值;否則,它只會輸出參數的字符串表示形式。

var data = { "a": [{ 
 
    "b": [ 
 
     ["c"], 
 
     [] 
 
    ], "d": [ 
 
     [], 
 
     [] 
 
    ], "e": [ 
 
     [], 
 
     ["f"] 
 
    ], "g": [ 
 
     [], 
 
     ["h", "i"] 
 
    ] 
 
}] }; 
 

 
function walk(a) { 
 
    if (Array.isArray(a)) { 
 
    a.map(walk); 
 
    } else if (typeof a === 'object') { 
 
    Object.keys(a).forEach(key => { 
 
     console.log(key); 
 
     walk(a[key]); 
 
    }); 
 
    } else { 
 
    console.log(a); 
 
    } 
 
} 
 

 
walk(data);

+0

謝謝,解決了這個問題。我正在嘗試這個,除非我先檢查'對象',然後'數組',我猜是錯誤的,因爲'對象'是超類。 – media

+0

這也是一個很好的解決方案;爲了清晰起見,我使用明確的'Array.isArray()'調用 – tavnab

0

基於示例所示,你可以在JSON字符串使用正則表達式:

let data = { 
 
    "a": [{ 
 
    "b": [ 
 
     ["c"], 
 
     [] 
 
    ], 
 
    "d": [ 
 
     [], 
 
     [] 
 
    ], 
 
    "e": [ 
 
     [], 
 
     ["f"] 
 
    ], 
 
    "g": [ 
 
     [], 
 
     ["h", "i"] 
 
    ] 
 
    }] 
 
}; 
 

 
let res = JSON.stringify(data).match(/\w+/g); 
 
console.log(res.join())

+0

這是'*廚師手指親吻*'聰明! – tavnab