$data = array();
while ( $row = $result->fetch_assoc() ){
$data[] = json_encode($row);
}
echo json_encode( $data );
Questo dovrebbe farlo. Inoltre, puoi utilizzare http://jsonlint.com/ per vedere quali sono i problemi con il tuo output JSON.
Aggiornamento: usando fetch_all()
potrebbe essere anche una buona idea
$data = $result->fetch_all( MYSQLI_ASSOC );
echo json_encode( $data );