XSLT 3.0 включает в себя функциональность для вывода JSON. В более ранних версиях вы можете сделать это «вручную», используя метод вывода текста, который вы здесь делаете. Но тогда вы несете полную ответственность за правильное форматирование вывода JSON, включая, в частности, экранирование специальных символов, таких как кавычки, переводы строки и обратный слеш. Это достаточно просто в XSLT 2.0 с использованием функции replace (); в XSLT 1.0 это более замысловато, хотя в exslt.org есть несколько шаблонов, которые вы можете включить в свою таблицу стилей, например, str: replace.
Когда вы задаете вопросы о XSLT на этом сайте, скажите, пожалуйста, какая версия XSLT (ы) вы можете использовать. Это часто имеет значение для ответа. Проблема в том, что XSLT 1.0 сейчас очень старый, но (как и COBOL) многие люди все еще используют его.