Как да запиша JSON данни във файл?
Имам JSON данни, съхранени в променливата data
.
Искам да ги запиша в текстов файл за тестване, за да не се налага всеки път да вземам данните от сървъра.
В момента се опитвам да направя следното:
obj = open('data.txt', 'wb')
obj.write(data)
obj.close
И получавам грешката:
TypeError: must be string or buffer, not dict
Как да поправя това?
982
3
Забравили сте същинската част на JSON -
data
е речник и все още не е кодиран в JSON. Запишете го по този начин за максимална съвместимост (Python 2 и 3):На съвременна система (т.е. Python 3 и поддръжка на UTF-8) можете да напишете по-хубав файл с
За да получите utf8-encoded файл за разлика от ascii-encoded в приетия отговор за Python 2, използвайте:
Кодът е по-прост в Python 3:
В Windows все още е необходим аргументът
encoding='utf-8'
къмopen
.За да се избегне съхраняването на кодирано копие на данните в паметта (резултат от
dumps
) и за да се извеждат utf8-кодирани байтстрийги както в Python 2, така и в Python 3, използвайте:Извикването на
codecs.getwriter
е излишно в Python 3, но е необходимо за Python 2.Четене и размер:
Използването на
ensure_ascii=False
осигурява по-добра четимост и по-малък размер:Допълнително подобрете четимостта, като добавите флаговете
indent=4, sort_keys=True
(както е предложено от dinos66) към аргументите наdump
илиdumps
. По този начин ще'получите хубава сортирана структура с отстъп в json файла за сметка на малко по-голям размер на файла.Бих отговорил с малка модификация на гореспоменатите отговори, а именно да напишете прецизиран JSON файл, който човешките очи могат да прочетат по-добре. За тази цел подайте
sort_keys
катоTrue
иindent
с 4 символа интервал и всичко е готово. Също така се уверете, че ascii кодовете няма да бъдат записани във вашия JSON файл: