2015-12-06 29 views
1

我的JSON文件,那麼,它的一部分看起來像:解析JSON文件和英文與Python 3.5

[ 
    { 
    "id": 472, 
    "name": "אבו גוש", 
    "engName": "ABU GHOSH" 
    }, 
    { 
    "id": 473, 
    "name": "אבו סנאן", 
"engName": "ABU SINAN" 
    }, 
    { 
    "id": 1342, 
    "name": "אבו קורינאת (יישוב)", 
    "engName": "ABU QUREINAT" 
    }, 
] 

等。

和我的代碼看起來象部分:

with open('israelCities.json') as data_file: 
    jsonData = json.loads(data_file.read().encode('utf8')) 
    print(jsonData) 

未能在第二行(jsonData = ....), 我是新來的蟒蛇,並沒有看到任何關於它的類似的問題, 任何幫助將不勝感激

謝謝!

編輯

那兩個爲我工作完美:

import json 
import urllib.request 
url='https://raw.githubusercontent.com/royts/israel-cities/master/israel-cities.json' 
data = urllib.request.urlopen(url).read().decode('utf-8') 
json.loads(data) 

而這一次:

import json 
import requests 

r = requests.get('https://raw.githubusercontent.com/royts/israel-cities/master/israel-cities.json') 
with open('israelCities.json', 'w') as f: 
    json.dump(r.json(), f) 


with open('israelCities.json') as f: 
json_data = json.load(f) 

謝謝!!

+0

什麼是失敗的平均?你得到了什麼錯誤? – IanAuld

+0

嗨,我不知道爲什麼,但我原來的帖子已被切斷,沒有錯誤在pycharm – R2R

回答

0

這樣,從您的代碼:json.loads(data_file.read().encode('utf8'))嘗試從文件讀取數據,然後將其轉換爲utf8。

試試這個:json.loads(data_file.read(), encoding='utf8'),意思是:讀取這個,寫成utf8。

當然,該文件應該保存爲utf-8或它不會工作。


編輯:

通過簡化使用,如@mhawke建議,並使用OP的原始文件,這個工程:

>>> httpresponse = urllib.urlopen('https://raw.githubusercontent.com/royts/israel-cities/master/israel-cities.json') 
>>> json.load(httpresponse) 

編輯2:

如果您正在使用Python 3,請改爲:

>>> import json 
>>> import urllib.request 
>>> url='https://raw.githubusercontent.com/royts/israel-cities/master/israel-cities.json' 
>>> data = urllib.request.urlopen(url).read().decode('utf-8') 
>>> json.loads(data) 
+0

真的不知道它是如何工作的, 它在urlopen上失敗... 只是踢我出 如果__name__ == 「__main__」: 的main() 科... – R2R

+0

您可能正在使用Python的** 3 **。我添加了一個Python 3的例子,這也適用於我。 – zvone

+0

嗨,你新的編輯工作!謝謝!, 有沒有可能讓它變成本地的? – R2R

0

您只需告訴loads編碼是什麼,而不是嘗試將其轉換爲編碼。

所以,

import json 

with open('israelCities.json') as data_file: 
    jsonData = json.loads(data_file.read(), encoding='utf-8') 
    print(jsonData) 

將產生

[{u'engName ':u'ABU GHOSH',u'id ':472,u'name':U'\ u05d0 \ u05d1 \ u05d5 \ u05d2 \ u05d5 \ u05e9'},{u'engName':u'ABU SINAN',u'id':473,u'name':u'\ u05d0 \ u05d1 \ u05d5 \ u05e1 \ u05e0 \ u05d0 \ u05df'},{u'engName':u'abu QUREINAT',u'id':1342,u'name':u'\ u05d0 \ u05d1 \ u05d5 \ u05e7 \ u05d5 \ u05e8 \ u05d9 \ u05e0 \ u05d0 \ u05ea(\ u05d9 \ u05d9 \ u05e9 \ u05d5 \ u05d1)'}]

但是隻有當你保存israelCities.json爲'utf-8'時,它的編碼纔是第一!

+0

感謝您的回覆,不知道爲什麼,但即使你的代碼它不工作: 開放(「israelCities.json」)作爲DATA_FILE: jsonData = json.loads(data_file.read() encoding ='utf8') print(jsonData) 從這裏下載的json文件: https://github.com/royts/israel-cities – R2R

+0

您需要明確地將該文件保存爲編碼在'utf-8 '。你有'vi'或'sublime'什麼的? –

+0

我沒有保存爲UTF-8與NP ++, 仍然沒有運氣 – R2R

0

你並不需要調用read()上的文件。使用json.load()代替:

import json 

with open('israelCities.json') as data_file: 
    jsonData = json.load(data_file) 

如果該文件是UTF8編碼(和一個在混帳回購協議israel-cities是)你不需要指定編碼json.load()


更新

在其他答案的評論看來,你可能會被下載從GitHub的文件並保存它。如果你製作了一個repo的克隆,你應該沒有問題 - 它已經是UTF8編碼了。如果你不確定,你可以使用requests庫下載文件,並明確將其保存爲JSON:

import json 
import requests 

r = requests.get('https://raw.githubusercontent.com/royts/israel-cities/master/israel-cities.json') 
with open('israelCities.json', 'w') as f: 
    json.dump(r.json(), f) 

現在,你絕對應該有一個可以加載一個文件:

with open('israelCities.json') as f: 
    json_data = json.load(f)