如何解决如何在 JMESpath 中获取嵌套数据?
我尝试了一些方法,但我的目标只是获得对 last
的访问权限,例如,在对 2021-02-12:5
和 610.0
部分使用通配符时。
{ symbol:symbol,test:putExpDateMap.*.[*].last}
是我最接近成功的地方,但没有雪茄,感谢有关如何编写最有效的查询以仅访问这些属性中的几个而不是所有属性的任何帮助。
{
"symbol": "TSLA","status": "SUCCESS","underlying": null,"strategy": "SINGLE","interval": 0,"isDelayed": true,"isIndex": false,"interestRate": 0.1,"underlyingPrice": 853.4449999999999,"volatility": 29,"daysToExpiration": 0,"numberOfContracts": 8,"putExpDateMap": {
"2021-02-12:5": {
"610.0": [
{
"putCall": "PUT","symbol": "TSLA_021221P610","description": "TSLA Feb 12 2021 610 Put (Weekly)","exchangeName": "OPR","bid": 2.22,"ask": 2.76,"last": 2.36,"mark": 2.49,"bidSize": 10,"askSize": 1,"bidaskSize": "10X1","lastSize": 0,"highPrice": 2.6,"lowPrice": 0.4,"openPrice": 0,"closePrice": 2.47,"totalVolume": 103,"TradeDate": null,"TradeTimeInLong": 1612558387464,"quoteTimeInLong": 1612558799414,"netChange": -0.11,"volatility": 134.512,"delta": -0.035,"gamma": 0,"theta": -0.836,"vega": 0.095,"rho": -0.007,"openInterest": 709,"timeValue": 2.36,"theoreticalOptionValue": 2.471,"theoreticalVolatility": 29,"optionDeliverablesList": null,"strikePrice": 610,"expirationDate": 1613163600000,"daysToExpiration": 5,"expirationType": "S","lastTradingDay": 1613178000000,"multiplier": 100,"settlementType": " ","deliverableNote": "","isIndexOption": null,"percentChange": -4.49,"markChange": 0.02,"markPercentChange": 0.77,"mini": false,"inTheMoney": false,"nonStandard": false
}
]
},"2021-02-19:12": {
"610.0": [
{
"putCall": "PUT","symbol": "TSLA_021921P610","description": "TSLA Feb 19 2021 610 Put","bid": 3.1,"ask": 3.9,"last": 3.4,"mark": 3.5,"bidSize": 1,"askSize": 4,"bidaskSize": "1X4","highPrice": 3.4,"lowPrice": 1.11,"closePrice": 3.42,"totalVolume": 22,"TradeTimeInLong": 1612558029558,"quoteTimeInLong": 1612558799676,"netChange": -0.02,"volatility": 103.828,"delta": -0.044,"gamma": 0.001,"theta": -0.558,"vega": 0.158,"rho": -0.016,"openInterest": 1677,"timeValue": 3.4,"theoreticalOptionValue": 3.418,"expirationDate": 1613768400000,"daysToExpiration": 12,"expirationType": "R","lastTradingDay": 1613782800000,"percentChange": -0.53,"markChange": 0.08,"markPercentChange": 2.39,"2021-02-26:19": {
"610.0": [
{
"putCall": "PUT","symbol": "TSLA_022621P610","description": "TSLA Feb 26 2021 610 Put (Weekly)","bid": 4.15,"ask": 5.1,"last": 4.2,"mark": 4.63,"bidSize": 4,"bidaskSize": "4X4","highPrice": 4.2,"lowPrice": 2.15,"closePrice": 4.67,"totalVolume": 6,"TradeTimeInLong": 1612558446501,"quoteTimeInLong": 1612558795805,"netChange": -0.47,"volatility": 91.456,"delta": -0.053,"theta": -0.476,"vega": 0.226,"rho": -0.03,"openInterest": 178,"timeValue": 4.2,"theoreticalOptionValue": 4.674,"expirationDate": 1614373200000,"daysToExpiration": 19,"lastTradingDay": 1614387600000,"percentChange": -10.15,"markChange": -0.05,"markPercentChange": -1.05,"2021-03-12:33": {
"610.0": [
{
"putCall": "PUT","symbol": "TSLA_031221P610","description": "TSLA Mar 12 2021 610 Put (Weekly)","bid": 6.3,"ask": 9.35,"last": 5.35,"mark": 7.82,"bidSize": 5,"bidaskSize": "5X1","highPrice": 5.8,"lowPrice": 5.35,"closePrice": 7.79,"totalVolume": 3,"TradeTimeInLong": 1612540259726,"quoteTimeInLong": 1612558799462,"netChange": -2.44,"volatility": 80.707,"delta": -0.073,"theta": -0.418,"vega": 0.37,"rho": -0.069,"openInterest": 2,"timeValue": 5.35,"theoreticalOptionValue": 7.786,"expirationDate": 1615582800000,"daysToExpiration": 33,"lastTradingDay": 1615597200000,"percentChange": -31.29,"markChange": 0.04,"markPercentChange": 0.5,"2021-03-19:40": {
"610.0": [
{
"putCall": "PUT","symbol": "TSLA_031921P610","description": "TSLA Mar 19 2021 610 Put","bid": 9.15,"ask": 10.05,"last": 9.56,"mark": 9.6,"highPrice": 9.56,"lowPrice": 6.65,"closePrice": 9.55,"totalVolume": 63,"TradeTimeInLong": 1612558720834,"quoteTimeInLong": 1612558795810,"netChange": 0.01,"volatility": 77.96,"delta": -0.082,"theta": -0.404,"vega": 0.443,"rho": -0.093,"openInterest": 4367,"timeValue": 9.56,"theoreticalOptionValue": 9.552,"expirationDate": 1616184000000,"daysToExpiration": 40,"lastTradingDay": 1616198400000,"percentChange": 0.08,"markChange": 0.05,"2021-04-16:68": {
"610.0": [
{
"putCall": "PUT","symbol": "TSLA_041621P610","description": "TSLA Apr 16 2021 610 Put","bid": 18.4,"ask": 19.3,"last": 15.64,"mark": 18.85,"bidSize": 2,"askSize": 5,"bidaskSize": "2X5","highPrice": 16.84,"lowPrice": 15.64,"closePrice": 18.81,"totalVolume": 5,"TradeTimeInLong": 1612544435621,"quoteTimeInLong": 1612558796856,"netChange": -3.17,"volatility": 74.6,"delta": -0.118,"theta": -0.391,"vega": 0.742,"rho": -0.231,"openInterest": 294,"timeValue": 15.64,"theoreticalOptionValue": 18.813,"expirationDate": 1618603200000,"daysToExpiration": 68,"lastTradingDay": 1618617600000,"percentChange": -16.87,"markPercentChange": 0.19,"2021-06-18:131": {
"610.0": [
{
"putCall": "PUT","symbol": "TSLA_061821P610","description": "TSLA Jun 18 2021 610 Put","bid": 42.65,"ask": 44.1,"last": 40.25,"mark": 43.38,"askSize": 3,"bidaskSize": "2X3","highPrice": 41.45,"lowPrice": 40.25,"closePrice": 43.34,"totalVolume": 2,"TradeTimeInLong": 1612551889156,"quoteTimeInLong": 1612558799879,"netChange": -3.09,"volatility": 75.159,"delta": -0.168,"theta": -0.363,"vega": 1.293,"rho": -0.681,"openInterest": 316,"timeValue": 40.25,"theoreticalOptionValue": 43.338,"expirationDate": 1624046400000,"daysToExpiration": 131,"lastTradingDay": 1624060800000,"percentChange": -7.13,"markPercentChange": 0.08,"2021-07-16:159": {
"610.0": [
{
"putCall": "PUT","symbol": "TSLA_071621P610","description": "TSLA Jul 16 2021 610 Put","bid": 51.1,"ask": 52.65,"last": 49.45,"mark": 51.88,"askSize": 2,"bidaskSize": "1X2","highPrice": 49.45,"lowPrice": 49.45,"closePrice": 51.81,"totalVolume": 4,"TradeTimeInLong": 1612552046681,"quoteTimeInLong": 1612558799421,"netChange": -2.36,"volatility": 74.204,"delta": -0.177,"theta": -0.337,"vega": 1.474,"rho": -0.898,"openInterest": 373,"timeValue": 49.45,"theoreticalOptionValue": 51.812,"expirationDate": 1626465600000,"daysToExpiration": 159,"lastTradingDay": 1626480000000,"percentChange": -4.56,"markChange": 0.06,"markPercentChange": 0.12,"nonStandard": false
}
]
}
},"callExpDateMap": {}
}
解决方法
您的查询确实有两个问题:
-
putExpDateMap.*
不会为您提供任何级别的未知属性,而只会提供一个级别。由于第一项将通过putExpDateMap."2021-02-12:5"."610.0"
静态访问,这意味着您必须使用两个通配符来访问嵌套在那里的数组,因此putExpDateMap.*.*
- 如果你需要处理数组,你确实必须使用
[*]
但它不是一个属性,所以应该是putExpDateMap."2021-02-12:5"."610.0"[*]
而不是putExpDateMap."2021-02-12:5"."610.0".[*]
,或者putExpDateMap.*.*[*]
而不是putExpDateMap.*.[*]
喜欢你的尝试。
最后但并非最不重要的是,使用更正的查询:
{ symbol:symbol,test:putExpDateMap.*.*[*].last }
你仍然以混乱的输出结束:
{
"symbol": "TSLA","test": [
[
[
2.36
]
],[
[
3.4
]
],[
[
4.2
]
],[
[
5.35
]
],[
[
9.56
]
],[
[
15.64
]
],[
[
40.25
]
],[
[
49.45
]
]
]
}
因为通配符正在创建一些新级别的数组 — 因为您可以拥有保存数组的 *
属性。
您可能需要阅读 JMESPath flatten operator []
以解决这个问题。
所以,我们以:
{ symbol:symbol,test:putExpDateMap.*.*[*].last[][] }
这给出:
{
"symbol": "TSLA","test": [
2.36,3.4,4.2,5.35,9.56,15.64,40.25,49.45
]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。