Take a look at how the AEM WCM Core Components library. It utilises content services to expose formatted and structured data on the .model.json HTTP request. It allows content authors to manage and construct the page using content components, then calling .model.json, you can get a JSON representation of components and properties.
A lesson to learn from here is that you can separate specific pieces of your JSON properties to specific AEM content components. When you add the specific AEM content component to the page, calling either a servlet or .model.json, you will get a JSON representation of the entire page and its contents, nicely formatted and structured.
I hope this helps.