Oli Oli - 3 months ago 11
Python Question

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!

Answer

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.

Comments