json.load(<filehandle>)
たとえば、JSON から派生したかなり複雑なデータ構造があります。
{
"sensors": {
"measurements": [
[
null,
null,
null
],
[
{
"sensor": "Fields 341",
"remote": null,
"mark": "reliable",
"duration": 81.54296875
},
{
"sensor": "Fields 341",
"remote": null,
"mark": "reliable",
"duration": 61.54534875
},
{
"sensor": "Fields 341",
"remote": null,
"mark": "reliable",
"duration": 61.89378945
}
]
]
}
}
結果は、ネストされた辞書とリストです。
{u'sensors': {u'measurements': [[None, None, None],
[{u'duration': 81.54296875,
u'mark': u'reliable',
u'remote': None,
u'sensor': u'Fields 341'},
{u'duration': 61.545348750000002,
u'mark': u'reliable',
u'remote': None,
u'sensor': u'Fields 341'},
{u'duration': 61.89378945,
u'mark': u'reliable',
u'remote': None,
u'sensor': u'Fields 341'}]]}}
目標は、データを取得し、sqlalchemy を介してデータベースに詰め込むことです。このような:
for item in sensors["measurements"]:
for j in range(len(sensors["measurements"])):
DBTable.DBField = item[j]["sensor"]
...
null/None
これの問題点は次のとおりです。測定値が誤っている場合(最初のもののように)、データ内の任意の部分が置き換えられる可能性があります。その場合、DBFields を割り当てる必要がありますNone
。この場合、割り当てによって例外が発生します。
TypeError: 'NoneType' object is unsubscriptable
例外を発生させずに for ループを実行する適切な方法はありますか (おそらく .get() を使用します)。そうでない場合、この存在しないデータ構造を処理する最善の方法は何ですか?