前言
最近在用別人的open source時因為json檔案讀取的問題卡一段時間,去trace code下去發現原來是別人的專案裡面有用到json.loads(),它的用處跟我平常在用的json.load()不太一樣,所以在這裡紀錄一下。
問題描述
首先,json.load()是用來讀取整個檔案的,也就是說通常會先用open()去打開json檔案,然後把檔案讀進來,大概像下面這樣:
1 | with open(fileneme, 'r') as f: |
不過如果是用json.loads()的時候,他會搭配檔案一次讀一行的動作,把該行字串當成json讀進來,用法如下:
1 | with open(filename, 'r') as f: |
不過使用json.loads()的時候檔案格式就必須一行是一個json structure,如果妳的json file長得像這樣就會讀取失敗:
{ |
我原本的json檔案就如上面這個格式一樣,不過在使用別人的tool時發現有問題,trace code下去才發現他是使用json.loads()去一行一行處理,與其去改別人的code倒不如把檔案格式改成符合要求的比較快速,在上網查詢後找到了解決方法如下:將上述的格式轉成只有一行的json structure即可。
1 | with open(filename, "r") as f: |
完畢,就john!
Reference
- Parse JSON structures in a txt file containing JSON and text structures
- Pythonh中用json.load() json.loads()加载json数据的方法