A member of Kilmarnock's under-19 squad, Johnston was promoted to the first team on 14 January 2012, where he was an unused substitute in their match against
Aberdeen. He went on to make his debut aged 17, on 24 March as a second-half substitute in a 2–0 win over
Motherwell. On 23 May 2016, he was one of six players released at the end of their contract. On 6 June 2016, it was announced that Johnston had signed for
Raith Rovers on a one-year deal. He left the club following their relegation to
Scottish League One, and joined
Scottish Championship side
Dumbarton in July 2017, after impressing during a trial period with the club. After finding his opportunities at the Rock limited, he joined
Scottish League Two side
Peterhead on loan in February 2018, and was released by Dumbarton at the end of the 2017–18 season. Johnston signed for
Annan Athletic in June 2018 and was nominated for
PFA Scotland Players' Player of the Year and named in the League Two Team of the Season in his first campaign with the club. Upon the expiration of his Annan contract, Johnston signed for Scottish League One side
Clyde in May 2019. He was released by Clyde in March 2021. In July 2021, Johnston returned to Annan Athletic, signing with the club for a second time. Johnston departed the club in November 2023 by mutual consent. Following his release from Annan, Johnston joined
Stranraer in December 2023. After a year out of football, he signed for a second spell at
Dumbarton in June 2025. He left the club in January 2026 having played 19 times. ==Career statistics==