我正在制作一本关于我们大都市区的字典。结构是这样的:
{
"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')
然后,我想将metropolitans保存到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
为什么?我知道我可以用&#39; wb&#39;完成一个文件。但我想用unicode写这个文件。
如果我使用dumps()和write():
,我可以写这个文件s = json.dumps(metropolitans, ensure_ascii=False, encoding='utf-8', indent=2, sort_keys=True)
results.write(s)
答案 0 :(得分: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)