Il connaît sa première expérience en Championship jouant pour le club des Rotherham Titans en 2013-2014 et 2014-2015[1]. Lors des saisons suivantes, il représente les clubs de Sedgley Park(en) (29 essais en 26 apparitions en 2016-2017) ou encore Boroughmuir en Championnat d'Écosse, dont il est le meilleur marqueur d'essais en 2018-2019 avec 19 unités[4].
Johnny Matthews rejoint le groupe d'entraînement des Glasgow Warriors en amont de la saison 2019-2020[3], avant de signer un contrat permanant avec eux un an plus tard après des débuts prometteurs[5]. Il marque son premier essai avec les Warriors en contre les Dragons, puis devient pour la première fois titulaire avec le club deux mois plus tard contre l'Ulster. En , il est le premier talonneur du club à réaliser un triplé, franchissant la ligne d'essai trois fois contre le Zebre Parma, adversaire contre qui il réitère le même exploit un an plus tard[5].
Lors du huitième de finale de Challenge Cup 2022-2023, contre les Dragons, il inscrit un total de cinq essais, soit une première pour un joueur de Glasgow[6],[5]. Lors de la finale de cette compétition, il décroche la place de titulaire au détriment de George Turner[4], mais Glasgow perd face au Rugby club toulonnais. Cette même saison, il est le joueur le plus prolifique du club en termes d'essais avec treize réalisations[4].
Durant la saison 2023-2024, les Glasgow Warriors atteignent la finale du championnat après avoir éliminé le Munster en demi-finale[7]. En finale contre les Bulls, Johnny Matthews est titulaire en première ligne avec Jamie Bhatti et Zander Fagerson et son équipe s'impose 21 à 16, remportant la compétition pour la deuxième fois de son histoire après 2015[8],[9]. Avec un total de quatorze essais marqués en URC durant la saison, il termine meilleur marqueur de la compétition[10].
En , il est appelé en remplacement du talonneur Stuart McInally blessé alors que l'Écosse dispute la Coupe du monde en France. Il était seulement cinquième dans la hiérarchie à ce poste[11]. Lors du match de poule contre la Roumanie, après son entrée depuis le banc des remplaçants, il marque son premier essai international pour ses débuts et distribue aussi une passe après contact décisive[12].