$data = array();
while ( $row = $result->fetch_assoc() ){
$data[] = json_encode($row);
}
echo json_encode( $data );
To powinno wystarczyć. Możesz także użyć http://jsonlint.com/ aby zobaczyć, jakie są problemy z danymi wyjściowymi JSON.
Aktualizacja: za pomocą fetch_all()
może być też dobrym pomysłem
$data = $result->fetch_all( MYSQLI_ASSOC );
echo json_encode( $data );