Appending data to a json file
python-oren at ben-kiki.org
Tue Apr 4 01:50:53 EDT 2017
You _can_ just extend a JSON file without loading it, but it will not be
Say the JSON file contains a top-level array. The final significant
character in it would be a ']'. So, you can read just a reasonably-sized
block from the end of the file, find the location of the final ']',
overwrite it with a ',' followed by your additional array entry/entries,
with a final ']'.
If the JSON file contains a top-level object, the final significant
character would be a '}'. Overwrite it with a ',' followed by your
additional object key/value pairs, with a final '}'.
Basically, if what you want to append is of the same kind as the content of
the file (array appended to array, or object to object):
- Locate final significant character in the file
- Locate first significant character in your appended data, replace it with
- Overwrite the final significant character in the file with your patched
It isn't elegant or very robust, but if you want to append to a very large
JSON array (for example, some log file?), then it could be very efficient
Or, you could use YAML ;-)
On Tue, Apr 4, 2017 at 8:31 AM, dieter <dieter at handshake.de> wrote:
> Dave <dboland9 at fastmail.fm> writes:
> > I created a python program that gets data from a user, stores the data
> > as a dictionary in a list of dictionaries. When the program quits, it
> > saves the data file. My desire is to append the new data to the
> > existing data file as is done with purely text files.
> Usually, you cannot do that:
> JSON representations is not a valid JSON representation.
> Thus, you cannot expect that after such a concatenation, a single
> call to "load" will give you back complete information (it might
> be that a sequence of "load"s works).
> Personally, I would avoid concatenated JSON representations.
> Instead, I would read in (i.e. "load") the existing data,
> construct a Python object from the old and the new data (likely in the form
> of a list) and then write it out (i.e. "dump") again.
More information about the Python-list