Python Forum

Full Version: Append JSON's and write to file
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I have a Sample JSON record in a file as below
{ "name":"John", "age":30, "car":"BMW" }

I want to create more JSON records out of it and i want to minimize the i/o by not writing to the file system everytime i create sample record, the code below is to change the age using parameters and hold the JSON records in a list and write to the file system when i am done generating the records.


    # Read the sample file
    with open("C:/myfile.json") as file:
        originalJSON = json.load(file)
    # How many sample Records?
    numberOfRecords = 4
    i = 1
    myOutput = [] # initializing a dummy list to append my json's
    while (i <= numberOfRecords):
            # Change the age
            originalJSON["age"] = i
            myOutput.append(originalJSON)
            i += 1
    # After appending all the JSON's to the list i want to write the JSON array to a file
    with open("C:/multiplerecords.json", 'w') as multipleJsons:
        json.dump(myOutput, multipleJsons)
The output looks like

[{ "name":"John", "age":4, "car":"BMW" }
{ "name":"John", "age":4, "car":"BMW" }
{ "name":"John", "age":4, "car":"BMW" }
{ "name":"John", "age":4, "car":"BMW" }]

$$$ the issue i see is, when i write myOutput list it generates 4 records in it but all of them are duplicates, the last json that was produced is written to the whole list. Instead i am looking for something like below

[{ "name":"John", "age":1, "car":"BMW" }
{ "name":"John", "age":2, "car":"BMW" }
{ "name":"John", "age":3, "car":"BMW" }
{ "name":"John", "age":4, "car":"BMW" }]


###################################################################################################################
originalJSON is a python object.

On line 10 you modify the object. On line 11, you append the object to your list. But none of these operations makes a copy. All 4 items in the list are the same object.

Probably you want to make a copy of it at the time you append.
        myOutput.append(copy.copy(originalJSON))
Thank you for the reply
is copy.copy a valid command? I tried it and python spit out an error.
Generally if you see a command in two parts like that, it indicates that it's part of a library. It's a standard library in this case, but you'll still need to import it.

import copy
within your script.

https://docs.python.org/3/library/copy.html
Thank you for that explanation, it really helped. I ended up using the deep copy function.
Appreciate your help.