2016-02-29 3 views
-3

Я получил JSON, который выглядит как что-то вроде этого:петля через JavaScript формата JSON

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?

EDIT:

Это мой новый код, но я до сих пор не может получить доступ к короткой или длинной позиции:

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

Возможный дубликат [Отображение всех ключей пары значений массива в гнездовой JSon javascrpit] (HTTP: // StackOverflow. com/questions/35124166/display-all-keys-value-pair-of-array-in-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

'position' - это массив. –

+0

ОК, я исправил код – suvroc

+0

@suvroc, это вызовет ошибку undefiend, поскольку вы пытаетесь извлечь данные массива с ключом как объект Object так –

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

вот моя попытка пожалуйста проверить его

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, пожалуйста, проверьте код. –

Смежные вопросы