What API endpoint response was that? Can you print the entire response like this
print(resp.text())
                
     
                                    
            {
  "uri" : "https://platform.devtest.ringcentral.com/restapi/v1.0/account/299164004/call-log?view=Simple&showBlocked=true&withRecording=false&dateFrom=2010-06-01T00:00:00.000Z&page=1&perPage=100",
  "records" : [ {
    "uri" : "https://platform.devtest.ringcentral.com/restapi/v1.0/account/299164004/call-log/AiQdXSahI0gKzUA?view=Simple",
    "id" : "AiQdXSahI0gKzUA",
    "sessionId" : "25883985004",
    "startTime" : "2021-07-12T18:50:00.581Z",
    "duration" : 31,
    "type" : "Voice",
    "internalType" : "LocalNumber",
    "direction" : "Inbound",
    "action" : "Phone Call",
    "result" : "Missed",
    "to" : {
      "phoneNumber" : "+14242728375"
    },
    "from" : {
      "phoneNumber" : "+18604281711",
      "location" : "Willimantic, CT"
    },
    "telephonySessionId" : "s-65ac02cc65d84ee195e1fe42d2b0ed24"
  }, {
    "uri" : "https://platform.devtest.ringcentral.com/restapi/v1.0/account/299164004/call-log/AiQdW8NbquqAzUA?view=Simple",
    "id" : "AiQdW8NbquqAzUA",
    "sessionId" : "25883984004",
    "startTime" : "2021-07-12T18:50:00.489Z",
    "duration" : 31,
    "type" : "Voice",
    "internalType" : "LongDistance",
    "direction" : "Outbound",
    "action" : "RingOut PC",
    "result" : "Call connected",
    "to" : {
      "name" : "Jay Peters",
      "phoneNumber" : "+14242728375",
      "location" : "Santa Monica Santa Monica, CA"
    },
    "from" : {
      "name" : "Jay Peters",
      "phoneNumber" : "+18604281711",
      "extensionId" : "299164004"
    },
    "extension" : {
      "uri" : "https://platform.devtest.ringcentral.com/restapi/v1.0/account/299164004/extension/299164004",
      "id" : 299164004
    },
    "telephonySessionId" : "s-9d40efdebaf04bae81b2a8859cef6adf"
  } ],
  "paging" : {
    "page" : 1,
    "perPage" : 100,
    "pageStart" : 0,
    "pageEnd" : 1
  },
  "navigation" : {
    "firstPage" : {
      "uri" : "https://platform.devtest.ringcentral.com/restapi/v1.0/account/299164004/call-log?view=Simple&showBlocked=true&withRecording=false&dateFrom=2010-06-01T00:00:00.000Z&page=1&perPage=100"
    }
  }
}
                
     
                                    
            The response is valid and the resp.json().records should be a valid array too. Not sure why you got that error. Can you try with Python 3.x? It shouldn't be a matter but just a test.
                
     
                                    
            I figured it out a solution. I can traverse the call log data and get the to and from phone numbers like this:
logdata=resp.text()
dict1 = json.loads(logdata)
for x, y in dict1.items():
    if x == 'records':
        for item in y:
            if isinstance(item,dict):
                for a, b in item.items():
                    if a == 'to':
                        print('To',b["phoneNumber"])
                    if a == 'from':
                        print('From',b["phoneNumber"])
          
 
                
     
                                    
            Issue is reserved word "from". Use standard python json object instead of the ringcentral JsonObject as indicated in your answer but you can do this instead:
response =  json.loads(resp.text())
for record in response["records"]:
     print(f'Call result: {record["result"]} {record["startTime"]} from {record["from"]["phoneNumber"]}')