1. 程式人生 > >python json檔案轉csv/excel

python json檔案轉csv/excel

  今天遇到一個問題,有幾份json檔案需要轉csv,網上有很多實現轉化的現成程式碼,但是博主測試之後發現並不好使,因為多數程式碼都是基於簡單深度=1的json資料來實現的,但博主的json資料深度>1,所以也並沒有找到現成程式碼來使用,於是博主只好自己動手:

# 首先,我們捋一下思路,深度>1,就意味著我們如果單純的想通過簡單迴圈獲取的話,必然要費腦子寫一番邏輯,而深度=1時相對就比較容易處理,網上有很多現成資源
# 所以,我們可以分解實現

 1、將複雜的json資料展開,從深度>1 ---> 深度=1

  實現方法:jsoncsv(python現成的json轉csv第三方工具包,沒有安裝的 pip install jsoncsv 安裝一下,經過博主測試發現該工具包直接轉csv效果不是很好,資料容易亂,但是用它展開json資料還是非常好用的)

   

jsoncsv -e raw.json expand.json    #將原json檔案資料展開 形成新資料檔案

  2、將 深度=1 的json資料 ---> csv資料

#coding=utf-8

import json
import csv
import sys
reload(sys)
sys.setdefaultencoding("utf-8")


json_str = '[{"fav_average": "0", "ranking": "1", "category_ranking": "0", "fan_count": "4,167.9萬", "title": "❤️會說話的劉二豆❤️", "comment_average": "5.4萬", "ad_coin": 0, "huox_index": 985, "is_lines": "1", "period": "20181111", "ad_share": "4.0萬", "fan_quality": "91", "coin_average": "0", "share_average": "40295.1", "up_average": "242.3萬", "new_ranking": "1", "last_category_ranking": "0", "video_average": 0, "id": "67241", "pic_url": "https://huox-oa.oss-cn-beijing.aliyuncs.com/media/f723aaacf187937267245c528f4a1800.jpg?x-oss-process=image%2Fformat%2Cjpg&OSSAccessKeyId=jojQCyIiMYJoA2X3&Expires=1550283494&Signature=MSQlnyH7ejqm8I09lJIwcoCydns%3D", "ad_fav": 0}]
' o = json.loads(json_str) def loop_data(o, k=''): global json_ob, c_line if isinstance(o, dict): for key, value in o.items(): if(k==''): loop_data(value, key) else: loop_data(value, k + '.' + key) elif isinstance(o, list):
for ov in o: loop_data(ov, k) else: if not k in json_ob: json_ob[k]={} json_ob[k][c_line]=o def get_title_rows(json_ob): title = [] row_num = 0 rows=[] for key in json_ob: title.append(key) v = json_ob[key] if len(v)>row_num: row_num = len(v) continue for i in range(row_num): row = {} for k in json_ob: v = json_ob[k] if i in v.keys(): row[k]=v[i] else: row[k] = '' rows.append(row) return title, rows def write_csv(title, rows, csv_file_name): with open(csv_file_name, 'w') as csv_file: writer = csv.DictWriter(csv_file, fieldnames=title) writer.writeheader() writer.writerows(rows) def json_to_csv(object_list): global json_ob, c_line json_ob = {} c_line = 0 # for ov in object_list : # for ov in object_list: # loop_data(ov) # c_line += 1 with open("json檔案路徑.json", "r") as f: for ov in f : ov = json.loads(ov.strip()) loop_data(ov) c_line += 1 title, rows = get_title_rows(json_ob) write_csv(title, rows, 'csv檔案儲存路徑.csv') json_to_csv(o)

至此,csv檔案轉化完畢。

從csv轉excel檔案就不多說了,相信大家都會,excel就可以快速支援。

 # 網上現成的小工具地址:https://json-csv.com/  (每天最多免費轉換1M,超過1M下載需要收費)

#             http://kpoda.com/  (看評價好像挺好使的,但是博主用的時候發現並沒有反應,大家可以試試)

希望對你有幫助。