As you are probably aware of, storing data in Ethereum is really expensive. With some quick calculations (based on What is the cost to store 1KB, 10KB, 100KB worth of data into the ethereum blockchain?) it would currently cost something like 5 million dollars to store a GB of data into Ethereum. So, you can see how much it would cost in your case to store the JSONs (probably a lot).
So, one typical alternative is to store the actual data in IPFS and only store hash values into Ethereum. This is a lot cheaper alternative; approximate prices are:
- Storing one hash (for example QmRAQB6YaCyidP37UdDnjFY5vQuiBrcqdyoW1CuDgwxkD4 which is 0x98ebda79fb50d75642261f9cfc0f210b53ddee5eabdbd304ff0afaa4543afd47 in bytes32) in the cheapest possible way (at least as far as I know) (bytes32 argument into an indexed log entry) costs 24662 gas which translates into $0.005 with current prices.
- Storing multiple hashes at the same time gets somewhat cheaper. Storing 10 bytes32 entries into log entries costs 67222 gas which is $0.013. (Using an array of bytes32 - so you can just use more entries).
Also, keep in mind that someone has to host your data in IPFS. Most likely that would be your own nodes, so you have to pay for their upkeep.
As for the reading costs, they are free. Reading data does not cost anything, so you don't need to worry about that. Also it's very fast as the data comes directly from your node.
As for your last question: there are basically no upper boundaries for how much data contracts can store, so yes, in theory a contract could store all your data.