This has been a long term project of mine, and while I've not gotten around to it yet, I think my planning was to use a combination of both Dop and Lionz answers here. (Unfortunately my planning notes don't have this written down!)
Essentially, the JSON would store all of the static information like base stats, types, movepool etc. for the Pokemon and then depending on what the information would be used for, each system would have data structures.
For example - I'd planned to use arrays to track stats of each Pokemon currently in battle, using the data in the JSON to help calculate stat changes. You could in theory use either an array or a dictionary to track which Pokemon you'd seen or caught and then draw the correct information out of the JSON for the dex.
I'm probably really overcomplicating it as I always do, but I guess it ultimately depends on how complex you want your game to be.