2016-02-29 84 views
-3

我有一個JSON它看起來像這樣的事情:遍歷JSON的JavaScript

var json = { 
    "stock1" : { 
    "positions" : [{ 
     "date": "29/02/2016", 
     "price": 15, 
     "type": "short" 
    }] 
    }, 
    "stock2" : { 
    "positions" : [{ 
     "date": "29/02/2016", 
     "price": 20, 
     "type": "long" 
    }] 
    } 
}; 

目前我有類似的東西:

<script> 
    function myFunction() { 
    ; 
    } 
</script> 
    <div id = "short"> 
    <button onclick="myFunction()"> 
     short 
    </button> 
    </div> 

我的JSON是實際上比這個例子更大。我想通過循環來獲得只有「短」的職位並打印出來。 這樣做只使用JavaScript的最佳方式是什麼?

編輯:

這是我的新代碼,但我仍然無法訪問或長或短的位置:

var stocks = []; 
var longOnMarket = []; 
var shortOnMarket = []; 
var typeOfPosition = []; 
var lolz = []; 
for (var key in json) { 
    if (json.hasOwnProperty(key)) { 
     var item = json[key]; 
     lolz.push(JSON.stringify(item)); 
     stocks.push(key); 
     var json2 = json[item]; 
     for (var key2 in json2) { 
      if (json2.hasOwnProperty(key2)) { 
      var longOrShort = json2[key2].positions; 
      typeOfPosition.push(JSON.stringify(longOrShort)); 
      } 
     } 
    } 
} 
alert(stocks); 
alert(lolz); 
alert(typeOfPosition); 
+0

可能重複://計算器。 com/questions/35124166/displays-all-keys-value-pair-of-nested-json-javascrpit) – Sandeep

回答

0

你需要向對象鍵的簡單迭代

var result = []; 
for (var key in json) { 
    if (json.hasOwnProperty(key)) { 
     var item = json[key]; 
     item.positions = item.positions.filter(function(el) { return el.type == 'short' }); 
     result.push(item); 
    } 
} 
+0

'positions'是一個數組。 –

+0

好的,我修復了代碼 – suvroc

+0

@suvroc這會拋出一個undefiend的錯誤,因爲你試圖用一個對象的方式來取出一個數組的數據,所以 –

0

你可以做的是

var json = { 
    "stock1" : { 
    "positions" : [{ 
     "date": "29/02/2016", 
     "price": 15, 
     "type": "short" 
    }] 
    }, 
    "stock2" : { 
    "positions" : [{ 
     "date": "29/02/2016", 
     "price": 20, 
     "type": "long" 
    }] 
    } 
}; 

var object = JSON.parse(json); 
for (var key in object) { 
//Do your stuff 

} 
+0

爲什麼我必須使用JSON.parse? – zardlemalefique

+0

轉換成適當的JSON格式。更多信息在這裏:http://stackoverflow.com/questions/4935632/parse-json-in-javascript –

0

此解決方案查找positions的數組,如果找到某個short,則返回該對象。

var object = { "stock1": { "positions": [{ "date": "29/02/2016", "price": 15, "type": "short" }] }, "stock2": { "positions": [{ "date": "29/02/2016", "price": 20, "type": "long" }] } }, 
 
    short = {}; 
 

 
Object.keys(object).forEach(function (k) { 
 
    if (object[k].positions.some(function (a) { return a.type === 'short' })) { 
 
     short[k] = object[k]; 
 
    } 
 
}); 
 

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

0

,這裏是我的嘗試,請檢查一下[顯示所有按鍵值對數組的嵌套JSON JAVASCRPIT(HTTP的

var i, 
shortTypePositionsArray = [], 
shortTypeWholeObject = {}; 
$.each(json,function(key,value){ 
    if(Object.keys(value) == "positions"){ 
     for(i = 0;i<value.positions.length;i++){ 
      if(value.positions[i].type == 'short') 
      { 
       shortTypePositionsArray.push(value.positions[i]); 
       shortTypeWholeObject[key] = value; 
      } 
     } 
    } 
}); 
console.log(shortTypePositionsArray); 
console.log(shortTypeWholeObject); 
+0

@zardlemalefique請檢查代碼。 –