I can see two ways to go about saving changes made to a map. You should keep in mind that loading a map is itself making a copy of the map data file, and any change made to the loaded map is not automatically saved to the file it came from. You may freely alter the loaded map using updateTile() during runtime without changing the map’s json file in storage. The simplest way to save the changes you’ve made would be to retrieve the map array with getMap(), encode that into a json string, and then save that to a file. When you go to load a map you could then check for your modified file first, and only load the original if a modified version isn’t found.
If the changes you’re making are relatively minor- a tree slashed down here, a boulder pushed there- it may be easier to store the changes in the same array as your inventory and character data. When you load into a map you could loop through your “map changes array” and make those few changes from the get go.
As for progression, location, and inventory, you might as well throw all of these into a single multidimensional array. You could encode the whole thing into a json string and save that to a file. When you launch your game you would only have the single file to load to retrieve all relevant data.