2016-12-01 159 views
0

我有數據這樣的JSON文件:如何從json文件讀取數據?

{ 
    "id": 1008, 
    "description": "Cheese, caraway", 
    "tags": [ ], 
    "manufacturer": "", 
    "group": "Dairy and Egg Products", 
    "portions": [ 
     { 
      "amount": 1, 
      "unit": "oz", 
      "grams": 28.35 
     } 
    ], 
    "nutrients": [ 
     { 
      "value": 25.18, 
      "units": "g", 
      "description": "Protein", 
      "group": "Composition" 
     }, 
     { 
      "value": 29.2, 
      "units": "g", 
      "description": "Total lipid (fat)", 
      "group": "Composition" 
     }, 
     { 
      "value": 3.06, 
      "units": "g", 
      "description": "Carbohydrate, by difference", 
      "group": "Composition" 
     }, 
     { 
      "value": 3.28, 
      "units": "g", 
      "description": "Ash", 
      "group": "Other" 
     } 
    ] 
} 

和我用下面的代碼,試圖從中讀取數據,

import json 
path = 'C:\\Users\\IBM_ADMIN\\Desktop\\ml-1m\\food_nutrients_database - 副本.json' 
data = open(path).read() 
records = json.loads(data) 

但出現以下錯誤:

records = json.loads(data) 
ValueError: Expecting value: line 1 column 1 (char 0) 

這裏有什麼問題?我注意到從「數據」返回的結果以「'鍩begin」開頭,這是可能的原因嗎?如果是這樣,如何解決它?

+0

顯然你的JSON格式不正確混淆。 –

回答

2

不要這樣做。只需傳遞整個文件中的數據即可。

data = open(path).read() 
records = json.loads(data) 

您可以通過使用load(),這需要的文件對象本身,使其更短:

records = json.load(open(path)) 
1

你做錯了,是,你正在閱讀從JSON文件中的每一行,並把它傳遞給JSON什麼.load(),所有你需要做的就是打開一次文件,讀取內容,然後將它傳遞給json.load方法,這將工作。

file_data = open(path).read() 
json_data = json.loads(file_data) 

Also the posted JSON format is incorrect, so make sure your JSON format is correct.

+0

我重新格式化JSON格式後,我仍然得到相同的錯誤,當我嘗試從(data = open(path).read())打印數據時,我注意到第一行中的前幾個字符是無效字符,是那可能的原因是什麼?以及如何解決這個問題? – tonyibm

0

你單獨從字符串讀線。試試這個:

import json 

with open(path, 'r') as infile: 
    data = json.load(infile) 

json.loads是加載一個字符串,JSON對象,所以一定不要與json.load

+0

謝謝,我認爲問題是從第一行開始時的無效字符,不知道如何刪除它,當我檢查記事本++中的文件時,它們對我來說是不可見的, – tonyibm