2015-03-03 146 views
1

我是jQuery和JSON的新手。我希望你能幫我完成我的小任務。我有以下JSON對象結構:jQuery - 如何從嵌套的JSON獲取JSON數組名稱

{ 
    "recipe": { 
     "myREAL":0, 
     "mySTRING":"STRING variable", 
     "myUDINT":0, 
     "mybool":0, 
     "ingNumber":[0,0,0,0,0], 
     "ingMinimumWeight":[0,0,0,0,0], 
     "ingNominalWeight":[0,0,0,0,0] 
    } 
} 

我想獲取數組名稱的名稱,而不是隻獲取索引和索引的值。

我到目前爲止輸出:

Key: myREAL Value: 0 
Key: mySTRING Value: STRING variable 
Key: myUDINT Value: 0 
Key: mybool Value: 0 
Key: 0 Value: 0 
Key: 1 Value: 0 
Key: 2 Value: 0 
Key: 3 Value: 0 
Key: 4 Value: 0 
... 

我感興趣的是這樣的結構:

Key: myREAL Value: 0 
Key: mySTRING Value: STRING variable 
Key: myUDINT Value: 0 
Key: mybool Value: 0 
ingNumber: 
Key: 0 Value: 0 
Key: 1 Value: 0 
Key: 2 Value: 0 
Key: 3 Value: 0 
Key: 4 Value: 0 
ingMinimumWeight: 
... 

我想這樣做jQuery中沒有specifiying數組變量的名稱。

我的jQuery代碼:

function iter(obj) { 
    for (var key in obj) { 
     if (typeof (obj[key]) == 'object') { 
      iter(obj[key]); 
     } else { 
      content = " Key: " + key + " Value: " + obj[key] + '\n'; 
      var box = $("#myArea"); 
      box.val(box.val() + content); 
     } 
    } 
} 
+0

究竟是什麼你想實現什麼? – undefined 2015-03-03 13:55:41

+0

我想給動態數組輸出一個標題。正如你可以在我的JSON對象中看到的數組名是ingNumber,ingMinimumWeight ...如果我沒有指定標題,我只會得到Key = number,Value = number,一路。它在控制檯上看起來不太好。每次遇到一個數組,我都希望它首先打印數組的名稱,然後打印出鍵和值。 – user3000138 2015-03-03 14:00:50

+0

@ user3000138你只需要在對象內包含box.val(),如果條件如此:) – mohamedrias 2015-03-03 14:17:19

回答

0

根據您所需的輸出,你需要將內容添加到盒子之前再次遞歸調用函數。

function iter(obj) { 
    var box = $("#myArea"); 
    for (var key in obj) { 
     if (typeof (obj[key]) == 'object') { 
      content = key+ " : \n"; 
      box.val(box.val() + content); 
      iter(obj[key]); 
     } else { 
      content = " Key: " + key + " Value: " + obj[key] + '\n'; 
      box.val(box.val() + content); 
     } 
    } 
} 

DEMO

+0

非常感謝! :) – user3000138 2015-03-03 14:31:59

0

你需要.append()(你正在使用jQuery吧?),屬性名的文本區域,如果你正在處理的對象。同樣使用===來檢查你是否正在處理一個對象。還要檢查obj[key]是不是null,因爲typeof null也是一個對象。

jsfiddle demo

function iter(obj) { 
    var box = $("#myArea"); 
    for (var key in obj) { 

     if (obj[key] !== null && typeof obj[key] === 'object') { 
      box.append(key+': \n') 
      iter(obj[key]); 
     } else { 
      content = " Key: " + key + " Value: " + obj[key] + '\n'; 
      box.append(content); 
     } 
    } 
}