Você pode fazer isso usando agregações e/ou subconsultas. Algo como:
select title, content, json_agg(comments.author, comments.message) as comments
from articles
join comments on articles.article_id = comments.article_id
group by article_id;
Se você precisar disso agregado em uma string/json/algo - basta envolvê-lo em outra consulta agregada como esta:
select json_agg(sub)
from (
select title, content, json_agg(comments.author, comments.message) as comments
from articles
join comments on articles.article_id = comments.article_id
group by article_id) sub;
Esta é uma consulta do Postgres. Não tenho experiência com Mysql.