Você está interpretando mal o que seu navegador está exibindo. Lembre-se de que JSON é essencialmente texto simples, mas seu navegador está tentando exibi-lo como HTML.
\n chars NÃO são respeitados por exibições em modo HTML, e eles irão envolver o texto no primeiro caractere de espaço apropriado. JSON pode perfeitamente manter \n chars dentro de suas strings sem nenhum problema. Provavelmente seu
<br> o erro vem do <br> inserção que você está fazendo em seu preg_replace chamada, porque NÃO existem <br> tags no JSON original. Em outras palavras, você está causando o erro que está tentando corrigir, tentando corrigir o erro que não existiria se você não estivesse tentando corrigi-lo.