У вас и есть идеологически правильный вариант: смысл controller-а получить HTTP-запрос, а затем сформировать и вернуть HTTP-ответ (объект Symfony\Component\HttpFoundation\Response) что у вас и происходит. Только MIME type для json правильней application/json.
В документации кстати есть
пример вовзрата json:
use Symfony\Component\HttpFoundation\Response;
...
$response = new Response(json_encode(array('name' => $name)));
$response->headers->set('Content-Type', 'application/json');