2017-04-30 55 views
1

我正在製作我們大都市區域的字典。結構是這樣的:編寫json文件時出現Python類型錯誤

{ 
    "Abilene": { 
    "allCities": [ 
     "Abilene" 
    ], 
    "latitude": "30.1588129", 
    "longName": "Abilene, TX Metropolitan Statistical Area", 
    "longitude": "-85.6602058", 
    "primaryState": "TX", 
    "states": [ 
     "TX" 
    ] 
    }, 

我想寫這個字典文件中的Unicode編碼的JSON,所以我進口的Unicode文本和IO包:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 
import io 
from os.path import exists 
import json 
import unicodedata 

我在文字設置鍵和unicode字符串中的值。

metropolitans[primaryCity] = {'allCities':allCities, 'longName':longName, 'allStates':states, 'primaryState':states[0]} 

metropolitans[primaryCity]['longitude'] = unicode(str(coordinates[primaryCity]['longitude']), encoding = 'utf-8') 

然後,我想將大都會保存到unicode中的json文件中。

with io.open('results.json', 'w', encoding='utf-8') as results: 
results.truncate() 
json.dump(metropolitans, results, ensure_ascii=False, encoding='utf-8', results, indent=2, sort_keys=True) 

而且,我得到這個錯誤:

File "readMetropolitan.py", line 190, in <module> 
json.dump(metropolitans, results, indent=2, sort_keys=True) 
File "/usr/lib/python2.7/json/__init__.py", line 190, in dump 
    fp.write(chunk) 
TypeError: write() argument 1 must be unicode, not str 

這是爲什麼?我知道我可以用'wb'完成一個文件的寫入,但是我想用unicode編寫這個文件。

如果我使用轉儲(我可以寫這個文件)和write():

s = json.dumps(metropolitans, ensure_ascii=False, encoding='utf-8', indent=2, sort_keys=True) 
results.write(s) 
+0

你能提供你所有的代碼嗎? –

+0

我不認爲你需要在'with io.open(...)'中使用'encoding ='utf-8'。 – tiwo

+0

數據如longName來自哪裏。它是unicode嗎? –

回答

0

您發佈的錯誤代碼上面的代碼,因爲錯誤回溯說,當發生錯誤甚至沒有跑在文件readMetropolitan.py跑這條線的線190:

json.dump(metropolitans, results, indent=2, sort_keys=True) 

當你發佈的代碼是:

json.dump(metropolitans, ensure_ascii=False, encoding='utf-8', results, indent=2, sort_keys=True) 

他們絕對不一樣。也許代碼是在編輯之前運行的?

錯誤回溯的前兩行具體說明了觸發錯誤的原因。

File "readMetropolitan.py", line 190, in <module> 
json.dump(metropolitans, results, indent=2, sort_keys=True) 
File "/usr/lib/python2.7/json/__init__.py", line 190, in dump 
    fp.write(chunk) 
TypeError: write() argument 1 must be unicode, not str 

另外,在關鍵字參數後面不能有位置參數results。因此,它應該是:

json.dump(metropolitans, results, ensure_ascii=False, encoding='utf-8', indent=2, sort_keys=True) 
+0

你說得對。我編輯過! – Heuyie