2017-04-30 43 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