18

Как записать данные JSON в файл?

11

Как мне записать данные в формате JSON, которые хранятся в словаре data, в файл?

Я пытаюсь использовать следующий код:

f = open('data.json', 'wb')
f.write(data)

Однако я получаю ошибку:

TypeError: must be string or buffer, not dict

Как мне исправить это и корректно записать данные в файл?

5 ответ(ов)

2

Чтобы улучшить читаемость вашего JSON-файла для человека, я бы немного изменил предложенные ранее решения. Для этого используйте параметр sort_keys, установленный на True, и задайте indent равным 4 пробелам. Также важно убедиться, что в вашем JSON-файле не будут записаны символы в ASCII-кодировке.

Вот пример кода, который выполняет эти требования:

import json

with open('data.txt', 'w') as out_file:
    json.dump(json_data, out_file, sort_keys=True, indent=4, ensure_ascii=False)

Таким образом, вы получите более структурированный и читабельный файл JSON.

0

Если вы пытаетесь создать дамп данных на греческом или других "экзотических" языках, как и я, и сталкиваетесь с проблемами (ошибками уникодирования) из-за необычных символов, таких как символ мира (\u262E) или другие, которые часто встречаются в данных в формате JSON, например, из Twitter, решение может быть таким (параметр sort_keys является необязательным):

import codecs, json
with codecs.open('data.json', 'w', 'utf8') as f:
     f.write(json.dumps(data, sort_keys=True, ensure_ascii=False))

Таким образом, вы сможете корректно сохранить данные с необычными символами в файл JSON без проблем с кодировкой.

0

Я не имею достаточной репутации, чтобы оставлять комментарии, поэтому хочу поделиться некоторыми своими наблюдениями по поводу этой раздражающей ошибки типа TypeError здесь.

В основном, я думаю, что это ошибка в функции json.dump() в Python 2. Она не может сохранить данные в формате Python (словарь / список), содержащие не-ASCII символы, даже если вы открываете файл с параметром encoding='utf-8'. (То есть, что бы вы ни делали). Однако json.dumps() работает как в Python 2, так и в Python 3.

Чтобы проиллюстрировать это, ссылаясь на ответ phihag: код в его ответе вызывает ошибку в Python 2 с исключением TypeError: must be unicode, not str, если data содержит не-ASCII символы. (Python 2.7.6, Debian):

import json
data = {u'\u0430\u0431\u0432\u0433\u0434': 1}  #{u'абвгд': 1}
with open('data.txt', 'w') as outfile:
    json.dump(data, outfile)

В то время как в Python 3 этот код работает нормально.

0

Чтобы записать данные в файл в формате JSON, вы можете воспользоваться функциями json.dump() или json.dumps(). В случае, если вам нужно сохранить данные непосредственно в файл, используйте json.dump(). Вот пример, как это можно сделать:

import json

data = [1, 2, 3, 4, 5]  # Допустим, у нас есть список с данными
with open('no.txt', 'w') as txtfile:  # Открываем файл 'no.txt' для записи
    json.dump(data, txtfile)  # Записываем данные в файл в формате JSON

В этом примере список data будет сохранен в файл no.txt в виде JSON-формата.

0

Ваш код имеет небольшой недостаток. Вы используете 'wb' (режим записи в бинарном формате) при открытии файла для функции json.dump(), что не является необходимым, поскольку JSON является текстовым форматом. Рекомендуется использовать текстовый режим 'w' вместо 'wb'. Вот правильный способ записи данных в файл с использованием json.dump():

import json

with open('data.txt', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False)

В этом примере:

  • Мы используем контекстный менеджер with, который автоматически закроет файл после завершения записи.
  • Режим 'w' используется для записи в текстовом формате.
  • Параметр ensure_ascii=False позволяет сохранить данные в оригинальном формате (например, Unicode), что может быть полезно, если ваши данные содержат символы, не входящие в ASCII.
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь