我无法访问要遍历的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,
}
}
})
}```
答案 0 :(得分:0)
我在这里看到的第一个问题是您提供了一个JSON
对象来处理函数,但是它的行为就像参数是Promise
类型一样。据我对您的问题的了解,您不知道要处理多少个密钥(例如CVM
,WLL
)。在这种情况下,您可以遍历键并为每个键查找选项:
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)