2016-08-25 67 views
0

道歉,如果這是一個重複或簡單的問題。OOP - 訪問對象數據

我最近一直在學Python(花了很多年編寫簡單的MATLAB腳本)。我已經開始探索麪向對象編程和JSON。

我想使用API​​從服務器收集數據。當對象返回時,我通常使用語法來訪問特定的數據字段。不過,我正在爲此苦苦掙扎。我有一個行對象:

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

我試圖訪問「OBJECTID」屬性的單個結果(result[0])。

我試過rowId = row.results[0].objectId,但得到錯誤「'SearchResultItem'對象沒有屬性'objectId'」。

我也試過rowId = row.results[0]['objectId'],但得到錯誤「'SearchResultItem'對象沒有屬性'__getitem__'」。

---編輯:

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__' 

我使用了一個名爲Smartsheet工具。我正在使用search_sheet請求。 API文檔(http://smartsheet-platform.github.io/api-docs/#search-sheet)說'SearchResultItem'是一個包含許多屬性的對象。它沒有提供更多的信息。

Smartsheet模型在這裏找到:https://github.com/smartsheet-platform/smartsheet-python-sdk/tree/master/smartsheet/models。我目前正在查找search_result.py和search_result_item.py來查找答案/線索。

---編輯結束

感謝您的幫助!

+0

你的對象不是一本字典(它只是當你打印它時看起來像的東西)。你的錯誤清楚地表明它是一個'SearchResultItem'。我們不知道'SearchResultItem'實現了什麼樣的接口,因此我們無法幫到你。 –

+0

讓我們知道什麼是'SearchResultItem',它不是一個json字符串,也不是一個字典。 – tianwei

+0

請提供從API獲取數據的全部響應,然後讓我們知道哪裏存在問題。 –

回答

0

你的庫代碼明確表示,該SearchResultItema property .object_id

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

你的問題不是字典/ JSON相關的,因爲你不是使用dictionaties。您正在使用包裹這些字典的自定義對象。

+0

謝謝盧卡斯。我缺乏知識/經驗意味着它對我來說並不明顯。出於興趣,是否有任何理由,當我打印行時,它說「objectId」作爲屬性,但「object_id」用於訪問數據? – Oli

+0

供將來參考:Smartsheet API文檔中描述的任何屬性(並不專門顯示在Python代碼示例中)表示屬性在原始API(JSON)請求/響應中的顯示方式。 Python SDK本身使用Python變量命名約定:「小寫字母與下劃線之間用下劃線分隔以提高可讀性」(如下所述:python.org/dev/peps/pep-0008)。例如,原始API響應可能包含屬性「modifiedAt」 - 但通過Python SDK使用此屬性時,您會將其稱爲「modified_at」。 –

+0

謝謝Kim。令人困惑的是,對於某些對象,原始API響應中的屬性可用於訪問數據。也許以前我只使用單詞的屬性,所以Python命名約定和原始API響應匹配。 – Oli

1

請嘗試:

rowId = row['results'][0]['objectId'] 
+0

@Oli請接受解決方案。 – drootnar

+1

這顯然不是 - OP的對象不是字典。 –

+0

我試過這個,它不起作用。不過謝謝你的建議。 – Oli