Search code examples
pythonoopsmartsheet-api

OOP - Accessing Object Data


Apologies if this is a repeated or simple question.

I have recently been learning Python (having spent many years writing simple MATLAB scripts). I've started exploring Object Oriented Programming and JSON.

I am trying to use an API to collect data from a server. When the objects are returned I'm mostly doing fine with using syntax to access particular data fields. However, I'm struggling with one. I have a row object:

row = {"totalCount": 1, "results": [{"parentObjectId": 887, "contextData": ["Row 1"], "parentObjectType": "sheet", "objectId": 599, "text": "Text", "parentObjectName": "Data", "objectType": "row"}]}

I am trying to access the "objectId" attribute for the single result (result[0]).

I have tried rowId = row.results[0].objectId but get the error "'SearchResultItem' object has no attribute 'objectId'".

I have also tried rowId = row.results[0]['objectId'] but get the error "'SearchResultItem' object has no attribute '__getitem__'".

--- EDIT:

print(reportingRow.results[0]['objectId'])
Traceback (most recent call last):

  File "<ipython-input-46-14e026c273e3>", line 1, in <module>
   print(reportingRow.results[0]['objectId'])

TypeError: 'SearchResultItem' object has no attribute '__getitem__'

I am using a tool called Smartsheet. I am using the search_sheet request. The API documentation (http://smartsheet-platform.github.io/api-docs/#search-sheet) says that 'SearchResultItem' is an object containing a number of attributes. It doesn't give much more information.

The Smartsheet models are found here: https://github.com/smartsheet-platform/smartsheet-python-sdk/tree/master/smartsheet/models. I am currently looking at search_result.py and search_result_item.py to find the answer/clues.

--- END OF EDIT

Thanks for any help!


Solution

  • Your library code clearly says, that SearchResultItem has a property .object_id.

    print(reportingRow.results[0].object_id)  # this works just fine
    

    Your problem is not dictionary/JSON-related because you are not using dictionaties. You are using custom objects wrapped around those dictionaries.