2016-08-25 86 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