If you are using MVC, you could simply build a controller rendering and format the cshtml markup as JSON (depending on where this component is placed in the rendering/placeholder structure of your page). You could also make it output a <script>
block with a variable initialised to the required JSON data.
Edit
After realising that you want the output from multiple renderings as JSON from a single request, this would need a different approach. You could make a JSON device along with a JSON-specific layout so for <hostname>/my-page
you could then request <hostname>/api/my-page
which would render the same page (and hence renderings) but using the JSON device (and hence JSON layout and renderings).