Javascript循环问题:嵌套数组访问json层次结构

时间:2020-06-26 19:08:07

标签: javascript json loops

我无法访问要遍历的api json的层次结构

这是我从端点返回的疯狂嵌套json:

如果有人对如何正确地解决此问题提出建议,那就太好了!

'''{ "CVM": {
  "options":[
     {
        "symbol":"CVM",
        "id":"0M0205C200280P200V21",
        "expirationDate":"20200814",
        "contractSize":104,
        "strikePrice":22.9,
        "closingPrice":12.4,
        "side":"tpu",
        "type":"equity",
        "volume":0,
        "openInterest":103,
        "bid":10.8,
        "ask":13.4,
        "lastUpdated":"2020-06-12",
        "isAdjusted":false
     },
     {
        "symbol":"CVM",
        "id":"00M0020002118VC020P0",
        "expirationDate":"20200809",
        "contractSize":103,
        "strikePrice":10,
        "closingPrice":3.2,
        "side":"tpu",
        "type":"equity",
        "volume":73,
        "openInterest":801,
        "bid":2.7,
        "ask":3.5,
        "lastUpdated":"2020-06-18",
        "isAdjusted":false
     }
  ],
  "quote":{
     "symbol":"CVM",
     "iexRealtimePrice":15.47
  } }, "WLL":{
  "options":[
     {
        "symbol":"WLL",
        "id":"0P200008L00220010LW3",
        "expirationDate":"20200815",
        "contractSize":102,
        "strikePrice":3,
        "closingPrice":0,
        "side":"put",
        "type":"equity",
        "volume":0,
        "openInterest":0,
        "bid":2.2,
        "ask":2.36,
        "lastUpdated":"2020-06-17",
        "isAdjusted":false
     },
     {
        "symbol":"WLL",
        "id":"2LL000P50W1700020800",
        "expirationDate":"20200730",
        "contractSize":101,
        "strikePrice":1.5,
        "closingPrice":0,
        "side":"upt",
        "type":"equity",
        "volume":0,
        "openInterest":0,
        "bid":0.64,
        "ask":0.76,
        "lastUpdated":"2020-06-11",
        "isAdjusted":false
     }
  ],
  "quote":{
     "symbol":"WLL",
     "iexRealtimePrice":1.297
  }}}'''

到目前为止,我试图使用的代码是:

//example url
let url01 = fetch('https://sandbox.stockapi.com/options');
     
    
Promise.all([url01]).then( allData =>{
    allData.forEach(file=>{
       process(file.json());
        
    })
})

let process = (prom) =>{
    prom.then(data=>{


        // i can't get around hard coding the CVM below

        for (var i = 0; i < data.CVM.options.length; i++) {
           //console.log(data);
            let obj = {
            symbol: data.CVM.options[i].symbol,
            
            }
        } 
            
    })
}```






2 个答案:

答案 0 :(得分:0)

我在这里看到的第一个问题是您提供了一个JSON对象来处理函数,但是它的行为就像参数是Promise类型一样。据我对您的问题的了解,您不知道要处理多少个密钥(例如CVMWLL)。在这种情况下,您可以遍历键并为每个键查找选项:

function process(data) {
    Object.keys(data).forEach(key => {
        const options = data[key].options;
        // Do whatever you want to do here.
        console.log(options);
    });
}

答案 1 :(得分:0)

您可能想要这样的东西

q={ "CVM": {
  "options":[
     {
        "symbol":"CVM",
        "id":"0M0205C200280P200V21",
        "expirationDate":"20200814",
        "contractSize":104,
        "strikePrice":22.9,
        "closingPrice":12.4,
        "side":"tpu",
        "type":"equity",
        "volume":0,
        "openInterest":103,
        "bid":10.8,
        "ask":13.4,
        "lastUpdated":"2020-06-12",
        "isAdjusted":false
     },
     {
        "symbol":"CVM",
        "id":"00M0020002118VC020P0",
        "expirationDate":"20200809",
        "contractSize":103,
        "strikePrice":10,
        "closingPrice":3.2,
        "side":"tpu",
        "type":"equity",
        "volume":73,
        "openInterest":801,
        "bid":2.7,
        "ask":3.5,
        "lastUpdated":"2020-06-18",
        "isAdjusted":false
     }
  ],
  "quote":{
     "symbol":"CVM",
     "iexRealtimePrice":15.47
  } }, "WLL":{
  "options":[
     {
        "symbol":"WLL",
        "id":"0P200008L00220010LW3",
        "expirationDate":"20200815",
        "contractSize":102,
        "strikePrice":3,
        "closingPrice":0,
        "side":"put",
        "type":"equity",
        "volume":0,
        "openInterest":0,
        "bid":2.2,
        "ask":2.36,
        "lastUpdated":"2020-06-17",
        "isAdjusted":false
     },
     {
        "symbol":"WLL",
        "id":"2LL000P50W1700020800",
        "expirationDate":"20200730",
        "contractSize":101,
        "strikePrice":1.5,
        "closingPrice":0,
        "side":"upt",
        "type":"equity",
        "volume":0,
        "openInterest":0,
        "bid":0.64,
        "ask":0.76,
        "lastUpdated":"2020-06-11",
        "isAdjusted":false
     }
  ],
  "quote":{
     "symbol":"WLL",
     "iexRealtimePrice":1.297
  }}}
  
   x=Object.entries(q).map(x=>x[1]["options"][0])
 console.log(x)

相关问题