Flatten complicated json data
通常jsonとしてデータお返すAPIのにCSVに機会的に変換しデータを返す オプションを付けようとして、ちょっと悩んだのでメモ
機械的なJSON2CSVのようなライブラリは使えそうになかったものの 結果的にはそれほど複雑な処理をせずにjson2csv的なメソッドを書く事ができそう。
階層化したJSONを一旦フラットなJSONにし、キーをヘッダ列にしカンマ区切りの 文字列を返せばよいのだろうと思う。
v = json.loads(json_sting)
print(tocsv(v))
def tocsv(obj, base=''):
flat_dict = {}
for k in obj:
value = obj[k]
if isinstance(value, dict):
flat_dict.update(tocsv(value, base + k + '.'))
elif isinstance(value, (int, str, float, bool)):
flat_dict[base + k] = value
else:
return flat_dict
下のリンクをほぼそのまま参考した。メソッドの再帰呼出しとか 自分ではまず近づかない手法なので、参考にできるエントリがあってよかった。