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.