Johnson was born in West Bromwich and attended Stuart Bathurst Catholic High School. He left in year nine and moved to Leeds to start his career at Leeds United, where he was recognised as a tenacious and skilful target man. He signed his first professional contract at Elland Road in July 2000, but with a number of strikers ahead of him in the pecking order, he was restricted to reserve team football and did not make his senior debut until he was loaned to Hull City. In his first match for the Tigers, on 13 August 2002 at Bristol Rovers, he was brought on as a substitute and scored an 85th-minute equaliser which secured a 1–1 draw. Late in the 2002–03 season he made his Premier League debut for Leeds in the 6–1 defeat of Charlton Athletic, replacing Alan Smith. Over the next two seasons, Johnson only made sporadic appearances for Leeds and was loaned to several clubs for first team experience.
In June 2005, he left Leeds and signed for Darlington on a free transfer where he enjoyed regular first team football, but fell out of favour under manager Dave Penney after nearly signing for Wycombe Wanderers. He joined Hereford United on 8 August 2007, initially on a short term contract, which was later extended. In his first season at Edgar Street he was used mainly as a winger and made little impact until he scored a last minute equaliser against Wycombe in December 2007. He made his first league start of the season in the following match, and featured regularly for the remainder of the season as Hereford won promotion to League One. He notably scored an inspirational winner in the FA Cup against Tranmere Rovers, to send Hereford into the Fourth Round for the first time in 16 years. He left the club by mutual consent on 21 April 2009.
He was at Bury on a three-month deal. Johnson made his debut as late substitute in a 3–0 lost to Bournemouth. On 12 September 2009, the club website announced that his month-to-month contract had been terminated. On 1st February 2018 he coached West Bromwich United FC u13s.