簡體   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