AFAIK, there is no way to update storage types(ex: can't add a new record field to a Map<sp.Nat, sp.record(a=1)>) of a contract after deployment. (Correct me if I'm wrong). This means, after a contract is deployed later on, the only way to add additional storage is to rely on encoding the data in JSON or to have it live under a different contract. Are there any other alternatives?
Is the main downside to using JSON for storage the expense in parsing/unparsing and saving/resaving of the JSON string blob? Perhaps if the JSON blob isn't too big it's not a big deal?