繁体   English   中英

编写json文件时出现Python类型错误

[英]Python Type Error While Writing a json File

我正在制作一本关于我们大都市区的字典。 结构是这样的:

  {
  "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中将metropolitans保存到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编写这个文件。

如果我使用dumps()和write(),我可以写这个文件:

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

您在错误代码上方发布的代码甚至没有运行,因为错误回溯表示在文件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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM