Вие тълкувате погрешно това, което браузърът ви показва. Не забравяйте, че JSON по същество е обикновен текст, но вашият браузър се опитва да го покаже като HTML. \n
chars НЕ се зачитат от дисплеи в HTML режим и те ще обвият текста в първия подходящ знак за интервал. JSON може перфектно да запази \n
символи вътре в своите низове без никакви проблеми.
Най-вероятно вашият <br>
идва грешка от <br>
вмъкване, което правите във вашия preg_replace
обадете се, защото НЯМА <br>
тагове в оригиналния JSON. С други думи, вие причинявате същата грешка, която се опитвате да поправите, като се опитвате да поправите грешката, която не би съществувала, ако не се опитвате да я поправите.