Using Mojolicious templates with JSON
Although templates are primarily used with HTML when writing programs in Mojolicious, it is entirely possible and quite simple to use them to respond to any of the MIME types that Mojolicious::Types defines. You merely use the appropriate one-word type name along with .ep, like this Mojolicious::Lite example:
@@ index.json.ep
% use Mojo::JSON qw(to_json);
%== to_json { foo => 3 };
Here, we permit the /index route to respond with JSON by using Mojo's convenient module. We use the double-equal percent-print form so that quote characters and other HTML-ish bits are output as-is, not ampersand-encoded.
It is important to not have empty lines above or below the content, as the newlines would appear in the output.
Also note the use of to_json (which returns characters) rather than encode_json (which returns bytes) to avoid double-encoding UTF8 characters.
With that in mind, you should be able to produce any file format you desire.