2016-09-21 3 views
0

現在、ComapaniesHouse APIを使用して特定の会社に関する情報を含むjsonファイルを返すプログラムを作成しています。PythonでネストされたJSONファイルでIF THENループを使用する

私は、次のコマンドを使用して簡単にデータを取得することができる午前:私は非常に多くを行うことができ、その情報で

r = requests.get('https://api.companieshouse.gov.uk/company/COMPANY-NO/filing-history', auth=('API-KEY', '')) 

data = r.json() 

は、しかし、私は君たちが可能でし期待していた問題に遭遇しました私を助けてください。私が目指すのは、jsonファイル内のネストされたすべてのエントリを調べて、特定のキーの値が特定の条件に一致するかどうかを確認することです。

鍵の1つは、入国日で、私は特定の日付より古い結果を無視したいと思い、私は次のようにこれを行うことを試みてきた。ここで

date_threshold = datetime.date.today() - datetime.timedelta(days=30)`` 



for each in data["items"]: 
     date = ['date'] 
     type = ['type'] 
    if date < date_threshold and type is "RM01": 
     print("wwwwww") 

それ私が何をしようとしているのか(明確ではないにしても)、それぞれのエントリを変数に割り当ててから、それを特定の基準に対してテストします。

、これは動作しませんが、Pythonは変数不一致エラーを吐く:

私は日付が文字列として格納されていると思うし、私はdatetime型にそれを比較することはできませんになり
TypeError: unorderable types: list() < datetime.date() 

APIドキュメント(https://developer.companieshouse.gov.uk/api/docs/company/company_number/filing-history/filingHistoryItem-resource.html)を確認すると、 'date'エントリが日付型として返されることが明確に示されています。

私が間違っていることは、私がコードしている残虐行為であると仮定したとき、私がPythonに非常に新しいことは非常に明白ですが、私の頭の中では少なくとも少し意味があるようです。このようなことが明らかでない場合は、基本的にjsonファイル内のすべてのエントリを調べ、日付と型が特定の記述と一致すれば、他のコードを実行できます(この場合はランダムテキストを使用しています) 。

ご協力いただきありがとうございます。何かが必要な場合はお知らせください。

:)以下に私のコードを微調整した後

EDIT

for each in data["items"]: 
     date = each['date'] 
     type = each['type'] 
    if date is '2016-09-15' and type is "RM01": 
     print("wwwwww") 

コードは、私がそこに知っているにもかかわらず、エラーなしで実行されますが、言葉が印刷されていませんその正確な日付、その正確なタイプ、任意の考えとjsonファイル内のエントリですか?

SOLUTION:私を助けるために皆に

おかげで、私は非常に基本的なエラーのカップルを作っていたが、期待通りに動作するコードは以下の通りです::

for each in data["items"]: 
    date = each['date'] 
    typevariable = each['type'] 

    if date == '2016-09-15' and typevariable == "RM01": 
     print("wwwwww") 

これは、「言葉を印刷しますwwwwww "3回、これらの基準を満たすJSON内に3つのエントリがあるので、正しいと見なされます。

+1

実際のコードですか? 'for'ループが間違っています。 data ['items']の中でそれぞれに 'が必要です:date = each ['date']'など。基本的に '['date']'と ''[type']'の前に 'each'を置く。各JSONオブジェクトを順番に「each」という名前に割り当てています。 – roganjosh

+2

'date = ['date']'とそれ以降の行は意味をなさないので、文字列を保持するリスト変数を作成しています。 'date = each ['date']'をしたかったのですか? –

+0

こんにちは、@ mike.k、コメントありがとう!私はこれらの変更を加えましたが、タイプエラーが発生しましたが、このタイプはlist()の代わりにstr()を使用します。だから私はなぜそれをテストして置くのではなく、もし日付が'2016-09-15 'であっても... - しかし何も起こらなかったと思った。コードは正常に実行されましたが、正確な日付と正確なタイプのjsonにエントリがあることはわかっていますが、私の言葉は印刷されませんでした。何かアドバイス? – Ruthus99

答えて

0

あなたはまずあなたの日付変数は、あなたが日時型変数date_thresholdで変数dateリストタイプを比較しているdatetime.strptime()

を使用して日時型に変換する必要があります。

+0

こんにちは@techidiot、返信のおかげで、私の答えを参照してください上記のコメント – Ruthus99

関連する問題