I haven't delved into CoreData just yet. It looks daunting, and I've only been doing this for a year, but it's next on my list to learn.
Check out my github account for some of my iOS stuff. (my username on hn = my username on github)
I am just wondering how to do something similar in an app I have built, calculates a column of numbers, but in a different knowledge domain from your app.
The numbers that are calculated are from direct user input, but the things that are stored like shipping and tax rates are stored using NSUserDefaults.
Caching data locally is fairly easy... just put the downloaded JSON file into the application's sandboxed /Documents folder for easy retrieval later.
Best possible solution in a perfect world? No. Works? yes. Works well? Yes.