How do I write JSON data to a file? How do I write JSON data to a file? python python

How do I write JSON data to a file?


You forgot the actual JSON part - data is a dictionary and not yet JSON-encoded. Write it like this for maximum compatibility (Python 2 and 3):

import jsonwith open('data.json', 'w') as f:    json.dump(data, f)

On a modern system (i.e. Python 3 and UTF-8 support), you can write a nicer file with

import jsonwith open('data.json', 'w', encoding='utf-8') as f:    json.dump(data, f, ensure_ascii=False, indent=4)


To get utf8-encoded file as opposed to ascii-encoded in the accepted answer for Python 2 use:

import io, jsonwith io.open('data.txt', 'w', encoding='utf-8') as f:  f.write(json.dumps(data, ensure_ascii=False))

The code is simpler in Python 3:

import jsonwith open('data.txt', 'w') as f:  json.dump(data, f, ensure_ascii=False)

On Windows, the encoding='utf-8' argument to open is still necessary.

To avoid storing an encoded copy of the data in memory (result of dumps) and to output utf8-encoded bytestrings in both Python 2 and 3, use:

import json, codecswith open('data.txt', 'wb') as f:    json.dump(data, codecs.getwriter('utf-8')(f), ensure_ascii=False)

The codecs.getwriter call is redundant in Python 3 but required for Python 2


Readability and size:

The use of ensure_ascii=False gives better readability and smaller size:

>>> json.dumps({'price': '€10'})'{"price": "\\u20ac10"}'>>> json.dumps({'price': '€10'}, ensure_ascii=False)'{"price": "€10"}'>>> len(json.dumps({'абвгд': 1}))37>>> len(json.dumps({'абвгд': 1}, ensure_ascii=False).encode('utf8'))17

Further improve readability by adding flags indent=4, sort_keys=True (as suggested by dinos66) to arguments of dump or dumps. This way you'll get a nicely indented sorted structure in the json file at the cost of a slightly larger file size.


I would answer with slight modification with aforementioned answers and that is to write a prettified JSON file which human eyes can read better. For this, pass sort_keys as True and indent with 4 space characters and you are good to go. Also take care of ensuring that the ascii codes will not be written in your JSON file:

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