2016-02-29 117 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请检查代码。 –