I’m no Ren'Py expert, so take this with a grain of salt but putting everything in a single JSON file means you’d have to load all your game data into memory, instead of just the parts you actually need. It also sounds like a nightmare to maintain.
The usual approach is just to use .rpy files they get compiled into bytecode and are designed for this kind of thing. That said, using JSON can work for big games, as long as you split it into multiple files and only load stuff as needed.
Then again I don't even make novels I just like reverse engineering them and I'm a memory freak so what do I know.