Делать самостоятельную генерацию json - категорически не правильное решение.
Вы по любому где-нибудь пропустите экранирование и получите на выходе невалидную структуру.
Тем более что для абсолютно любого парсера json все эти переносы строк и пробелы не значимы, поэтому я в принципе не понимаю зачем вы хотите это сделать.
PS
Если уж очень хочется - можно наколхозить что-нибудь типа
echo '[' . PHP_EOL;
$count = count($data);
$i = 0;
foreach ($data as $item) {
$i++;
echo ' ' . json_encode($item, JSON_UNESCAPED_UNICODE) . ($i < $count ? ',' : '') . PHP_EOL;
}
echo ']';
Но повторюсь, это плохое решение как с точки зрения производительности, так и вообще.