If you’re not concerned about losing state when the app is closed and relaunched, then you don’t have to save anything to file. It’s enough to just keep the data in memory.
What you should save to file is only the data that you want to make sure is kept between app launches. This is your persisted data. It could be things like player progress, statistics, in-game currency etcetera. It normally does not include things like smashedWindow, unless you want your player to get back to exactly where he left off after the app is relaunched.
JSON is just a data format that is very similar to how actual Lua tables look, which makes it easy to serialize/deserialize Lua tables to/from JSON files. Compare it to XML and you’ll probably understand why JSON is preferred.