Johnson attended Westcliff Primary school and Dawlish comprehensive in Devon, and played for the local Dawlish youth side. He was spotted by Crewe Alexandra manager Dario Gradi on a pre-season tour of Devon. He moved to Cheshire, attended Holmes Chapel Comprehensive School and began his career as a trainee with Crewe Alexandra, turning professional in 1996. A hard-working midfielder, Johnson's potential led Premier League team Derby County to offer £2.5 million for his signature in 1999. The transfer went through, but Johnson's loyalty to Crewe meant he insisted on staying to help their relegation fight, delaying his move to Derby by two months. In the end, Crewe avoided relegation by a single point. His continued progress led to a solitary appearance for England, against Italy in November 2000, and further interest in his services. Leeds United ultimately paid £7 million to acquire Johnson on 16 October 2001, but a series of severe injury problems restricted him to just 54 league appearances in four years at Leeds. When Johnson returned to full fitness, Leeds decided not to play him to reduce their liability for transfer fees to Derby. He stayed with the club after their relegation in 2004, and was eventually released in August 2005. He returned to Derby County in 2005, where he successfully resurrected his career. He played his final game for the club on 28 May 2007 at Wembley Stadium, where he helped the club win the Championship Play-off Final and promotion to the Premier League. However, during the match, Johnson injured his knee, and was substituted with three minutes remaining. He was released from his contract in June 2007, along with seven other players. The knee injury finished his career at the age of 28.
International career
Under-21
Johnson made his debut for the England under-21s in the win against Luxembourg in October 1998. He came on for Frank Lampard as England won 5−0 in the 2000 UEFA European Under-21 Championshipqualifier. On 26 March 1999, he made his full debut in the qualifier against Poland as England won 5−0 at The Dell. The fixture was only the third time in U21s' history that the full starting eleven all went on to win full international caps with the senior team. England finished top of their group and qualified for the play-offs, and Johnson featured as England beat Yugoslavia to advance to the tournament finals. At the finals in Slovakia, he started the group games against Italy and Turkey but England were eliminated after finishing in third place. He made two appearances during England's qualifying campaign for 2002 UEFA European Under-21 Championship, but his last game came in the friendly defeat against Portugal in April 2002. Overall, Johnson made 15 appearances for the U21s but scored no goals.
Senior
Johnson received his first call up to the senior England squad whilst playing for Derby County in November 2000. He became the first Derby player since Mark Wright in 1991 to be named in an England squad. On 15 November, he made his debut in the defeat against Italy; he replaced Gareth Barry after 73 minutes in the 1−0 loss at Stadio delle Alpi in Turin. This was his only cap for England.
Honours
;with Crewe Alexandra
Football League Second Division play-off final winner: 1997
;with Derby County
Football League Championship play-off final winner: 2007