json_encode работает вне while, но не работает внутри while.
Нормально он работает, но конкатенация нескольких Json строк не даст валидный Json.
НО, просто невозможно сделать так
Ну раз невозможно, какие вопросы?
Используйте implode вместо ручного перечисления. Или вообще не собирайте массив, а сразу конкатенируйте в одну строку.