PythonからAPIを使って、データを取得したときに、json形式だと思ったら、そうではなかったので、その対応をした記録です。
質問だったら、間違いなくを付けるような内容ですが、あとになってあの時どうやってここに辿り着いたんだろうと思った時のために、メモを残しました。
最初に試したこと
import os.path
p = "curl https://hoge.jp/results/123456789"
req = os.system(p)
変数reqに値が入るかと思ったら入りませんでした。
そこで姑息な手段かと思いつつも、結果をファイルに出力しました
import os.path
p = "curl https://hoge.jp/results/123456789 > result.json"
#req = os.system(p)
これで“やりたいこと”はできましたがカッコ悪いので、「requests.get」を使うことにしました。
import requests
response = requests.get(
'https://hoge.jp/results/123456789'
)
json_load = json.load(json_open)
json_val = json_load["results"]
「TypeError: byte indices must be integers or slices, not str」となりました。
なんのことだか、ちっともわからないので、printすると、jsonデータの先頭に“b”がついていて、その後ろはシングルクォートで囲まれていました。
b'{"results":[{"from"
先頭の“b”はバイト型を表しているとわかり、文字型に変換しました。
json_load = response.content.decode('utf-8')
json_val = json_load["results"]
すると今度は、
「TypeError: string indices must be integers」のエラーです。
json形式ってただの文字に見えて、辞書型でないとダメらしい。
ということで次は文字型を辞書型に変換しました。
json_data = response.content.decode('utf-8')
json_load = json.loads(json_data)
json_val = json_load["results"]
最終的にはこのコードで、APIで得られた結果から、キーresultの内容を取得することができました。