2016-08-25 10 views
0

これは繰り返しまたは簡単な質問の場合にはお詫び申し上げます。OOP - オブジェクトデータへのアクセス

私は最近Pythonを学んでいます(単純なMATLABスクリプトを長年使っています)。私は、オブジェクト指向プログラミングとJSONを学び始めました。

APIを使用してサーバーからデータを収集しようとしています。オブジェクトが返されるとき、私はほとんどの場合、特定のデータフィールドにアクセスするための構文を使用してうまくやっています。しかし、私は苦労している。私は単一の結果(result[0])のために、「OBJECTID」属性にアクセスしようとしています

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

:私は、行オブジェクトを持っています。

私はrowId = row.results[0].objectIdを試しましたが、エラー "'SearchResultItem'オブジェクトに 'objectId'属性がありません。

私もrowId = row.results[0]['objectId']を試しましたが、エラー "'SearchResultItem'オブジェクトには属性 '__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__' 

私はSmartsheetと呼ばれるツールを使用しています。私はsearch_sheetリクエストを使用しています。 APIドキュメント(http://smartsheet-platform.github.io/api-docs/#search-sheet)は、 'SearchResultItem'は多数の属性を含むオブジェクトであると言います。これ以上の情報はありません。

スマートシートのモデルは、https://github.com/smartsheet-platform/smartsheet-python-sdk/tree/master/smartsheet/modelsです。私は現在search_result.pyとsearch_result_item.pyを見て答え/手がかりを見つけています。

--- EDIT

任意の助けてくれてありがとうOF END!

+0

あなたのオブジェクトは辞書ではありません(あなたがそれを印刷したときのようなものです)。あなたのエラーは明らかにそれが 'SearchResultItem'だと言います。 'SearchResultItem'がどのようなインターフェースを実装しているのかわからないので、私たちはあなたを助けません。 –

+0

'SearchResultItem'が何であるかをお知らせください.Json文字列でも辞書でもありません。 – tianwei

+0

データの取得先からAPIの全回答をご提供いただき、問題の発生場所をお知らせください。 –

答えて

0

あなたのライブラリコードはっきりSearchResultItema property .object_idを持っていることを言います。

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

あなたははdictionatiesを使用してではありませんので、あなたの問題は、JSON関連/辞書ではありません。それらの辞書にラップされたカスタムオブジェクトを使用しています。

+0

ありがとうLukasz。知識/経験の欠如は、それが私には明らかではないことを意味します。興味のない、行を印刷するときに "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

ありがとうございました。混乱しているのは、一部のオブジェクトでは、生のAPIレスポンスの属性を使用してデータにアクセスできるということです。おそらくこれまで私は単一の単語である属性しか使用していなかったので、Pythonの命名規則と未処理のAPI応答が一致していました。 – Oli

1

てみてください:

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

@Oliもし解決しない場合は、解決策を受け入れてください。 – drootnar

+1

OPのオブジェクトは辞書ではありません。 –

+0

私はこれを試して、それは動作しません。しかし、提案していただきありがとうございます。 – Oli

関連する問題