Skip to content
Advertisement

Extract three values from JSON output

I am trying to get three specific values from within a JSON return. I can only figure out how to get ALL the information rather than specific pieces. Here’s the JSON output (note – the date 2021-08-13:2 is going to change every week but I need that value also the 710.0 will likely change, too):

{
 "callExpDateMap": {
  "2021-08-13:2": {
   "710.0": [
    {
     "ask": 8.5,
     "askSize": 23,
     "bid": 8.2,
     "bidAskSize": "3X23",
     "bidSize": 3,
     "closePrice": 8.28,
     "daysToExpiration": 2,
     "deliverableNote": "",
     "delta": 0.506,
     "description": "TSLA Aug 13 2021 710 Call (Weekly)",
     "exchangeName": "OPR",
     "expirationDate": 1628884800000,
     "expirationType": "S",
     "gamma": 0.019,
     "highPrice": 0.0,
     "inTheMoney": false,
     "isIndexOption": null,
     "last": 8.25,
     "lastSize": 0,
     "lastTradingDay": 1628899200000,
     "lowPrice": 0.0,
     "mark": 8.35,
     "markChange": 0.07,
     "markPercentChange": 0.88,
     "mini": false,
     "multiplier": 100.0,
     "netChange": -0.03,
     "nonStandard": false,
     "openInterest": 6224,
     "openPrice": 0.0,
     "optionDeliverablesList": null,
     "percentChange": -0.33,
     "putCall": "CALL",
     "quoteTimeInLong": 1628625599948,
     "rho": 0.035,
     "settlementType": " ",
     "strikePrice": 710.0,
     "symbol": "TSLA_081321C710",
     "theoreticalOptionValue": 8.277,
     "theoreticalVolatility": 29.0,
     "theta": -1.127,
     "timeValue": 8.25,
     "totalVolume": 0,
     "tradeDate": null,
     "tradeTimeInLong": 1628625596495,
     "vega": 0.284,
     "volatility": 29.119
    }
   ]
  }

What I need is the date (in this case 2021-08-13:2 and also the “ask” and “bid”.

Here’s the code I’ve got so far:

for response_line in response.iter_lines():
        if response_line:
            json_response = json.loads(response_line)
            #print(json.dumps(json_response, indent=1, sort_keys=True))
            contract_info = json_response['callExpDateMap']
            print(contract_info)

I tried things like contract_info = json_response[‘callExpDateMap’][0] thinking it’s list position 0 that would return the date but alas I’m stuck.

Thanks in advance for your help

Advertisement

Answer

Here’s a fragment based on your variable names that will find all of the ‘ask’ values:-

r = json_response['callExpDateMap']
for k in r.keys():
    for m in r[k].keys():
        for p in r[k][m]:
            print(p['ask'])
3 People found this is helpful
Advertisement