前提・実現したいこと
ネストされた以下のようなJSONをCSVに変換したいのですが、いろいろ試してみたものの、どう扱っても上手く処理できません。
どなたか変換する方法をご教授頂けないでしょうか。
JSON
1{ 2 "masterNumber": 10000, 3 "code": "m-001", 4 "customerData": { 5 "name": "Jiro", 6 "age": 45 7 }, 8 "Address": [{ 9 "name": "testAreport", 10 "email": "tA@sample.co.jp" 11 }], 12 "items": [{ 13 "itemId": "item01", 14 "itemName": "商品01" 15 }, 16 { 17 "itemId": "item02", 18 "itemName": "商品02" 19 }, 20 { 21 "itemId": "item03", 22 "itemName": "商品03" 23 }] 24}
csv
1"masterNumber","code","customerData__name","customerData__age","Address__name","Address__email","items__itemId","items__itemName" 2"10000","m-001","Jiro","45","testAreport","tA@sample.co.jp","item01","商品01" 3"","","","","","","item02","商品02" 4"","","","","","","item03","商品03"
試したこと
json_normalizeというモジュールを使ってみたのですが、期待する結果のように変換できませんでした。
Python
1import json 2from pandas.io.json import json_normalize #package for flattening json in pandas df 3 4sample_object = {'Name':'John', 'Location':{'City':'Los Angeles','State':'CA'}} 5json_normalize(sample_object)
> 期待する結果のように変換できませんでした。
ではどうなったのでしょうか?
csvという手段は2次元の数値列や文字列を表現するものであって、「ネストされたJSON」を表現するのには適切ではないと思います。単にファイルに書き出したいだけであれば、JSONの形で書き出すべきです。いまの質問では、質問者様がcsvという手段を勘違いしているように思われますので、回答がつきにくいと思います。なぜcsvなのか、という目的・理由をもう少し記載ください。
アドバイスありがとうございます。
CSVというより、人が目視で大まかな内容を確認したいため、1次元に変換したいが意図になります。
背景としては以下の通りです。
* 検索条件を出力した大量のJSONファイルがある(形式も様々なため、クラス定義などは行えない)
* その内容によって、営業アクションを行うため一覧形式で検索条件を確認したい
* このため、JSON形式をそのまま見るのは辛いので、内容が把握できる程度に可読性をあげたい
* 都合上、画面などを作るほどの工数や期間はないためなるべく省力で解決したい
質問者様の要望は、オブジェクト1つ1つを、1行1行で出力して、可読性と一覧性をあげたい、あまり工数をかけずに、ということですよね?csvかjsonかは本質的ではないと受け取りました。
普通にjson.dumpすると要望通りに出力されると思うのですが、試されたのでしょうか?
csvで出力しようとしたらつまずいた、という情報だけで、jsonで出力しようとしたら何の課題があったのかが不明です。Pythonのjson出力は、例示されたようなキレイな形しかできないという勘違いがあるのでは?
???