Johnson began his career with Wycombe Wanderers, where he spent six years as a professional. He then joined Welsh side Cardiff City in 2006 for £275,000. He was part of the team that reached the 2008 FA Cup Final and was twice chosen as the club's Player of the Year in his three-year stint with the club.
He moved into the Premier League by signing for Birmingham City in 2009 for £5 million, with whom he won the 2011 League Cup. He departed Birmingham in 2011 after their relegation to join Midlands neighbours Wolverhampton Wanderers, with whom he suffered two further consecutive relegations, leading to his exclusion from first team involvement. After loan spells with Sheffield Wednesday and West Ham United, Johnson left Wolves by mutual consent, and spent the latter part of the 2014–15 season with Charlton Athletic. He played for Indian Super League club Pune City in 2015 before returning to Charlton in January 2016.
Johnson spent time at Portsmouth and Bournemouth before joining Wycombe Wanderers as a 15-year-old, where he developed through the club's youth system. He made his first-team debut for Wycombe in the final game of the 1999–2000 season against Cambridge United, becoming the youngest ever player to make a Football League appearance for the club at the time, at the age of 17 years and 8 days. The following season, Johnson also made one substitute appearance, and was on the bench as Wycombe beat Premier League club Leicester City in the FA Cup quarter finals. The 2003–04 season saw Johnson in and out of the side under manager Tony Adams but he was still awarded the Fans' Player of the Year Award.
After the departure of Adams after one season (6 months), Johnson became a regular in the side and was handed the captaincy by new manager John Gorman when he took over in November 2004, as well as finishing second in the player of the year award to forward Nathan Tyson.
After 183 appearances and 22 goals for Wycombe, Johnson joined Cardiff City on 4 July 2006 for a fee of £275,000; Cardiff's local rivals Swansea City £100,000 bid was rejected.
Johnson had a strong first year at Cardiff, and after spending the first six months as a regular substitute, began to form a dominant pairing with Dutchman Glenn Loovens which saw them keep club captain Darren Purse out of the side. In the 2007–08 season he began to score goals, with late winners against Norwich City in the League and Brighton & Hove Albion in the League Cup, as well as vital equalisers against Hull City and Preston North End. Johnson scored the second goal of Cardiff's memorable 2–0 away victory over Premier League Middlesbrough in the 2007–08 FA Cup quarter final, and his header in the Severnside Derby match against Bristol City in March 2008 was his seventh goal of the season. He played in all six of Cardiff's matches on their way to the FA Cup Final, in which they lost 1–0 to Portsmouth, and at the end of the season he was awarded the club's Player of the Year award.
The summer transfer window saw prolonged interest in Johnson; both Ipswich Town and West Bromwich Albion had bids rejected. Despite the interest Johnson remained with the side into the new season although he did see his centre-back partner Glenn Loovens leave to join Celtic. On the opening day of the season, Johnson scored a late winning goal against Southampton as Cardiff came away with a 2–1 win. Despite continued changes in his defensive partner, having played alongside Loovens, Purse and new signing Gábor Gyepes, who forced his way into the side past Purse in November, Johnson passed 100 appearances for the club, and had played every minute of the season until he had to leave the field during a 2–0 victory over Crystal Palace on 11 April 2009, after being hit in the throat by an elbow from Palace defender Claude Davis. After the incident Johnson suffered breathing difficulties and was forced to spend two nights in hospital as well as having daily checks throughout the following week. Davies was found guilty of violent conduct by the Football Association and banned for three matches. Johnson was forced to miss the next match, a 3–1 win over Burnley, but returned for the 6–0 defeat to Preston North End the following week. He was chosen as the club's player of the year for the second year running, and was named in the Championship Team of the Year.
In June 2009, after two previous bids had been rejected, Cardiff accepted an offer of £5m from Birmingham City. Johnson, described by former teammate Tony Capaldi as "definitely captain material", signed a three-year deal with the club on 25 June 2009, stating "Premier League football is the dream at the start of any footballer's career so I am pleased I have been given that chance with Birmingham and I can't wait to get started." He made "an impressive debut" in Birmingham's first match of the season, a 1–0 defeat at Manchester United. He was part of the Birmingham team which went 12 games unbeaten, a club record for the top flight; at Christmas, The Times' correspondent Patrick Barclay described Johnson and defensive partner Scott Dann as "the players of 2009–10 thus far"; and Johnson was suggested as a possible England player. Johnson scored his first goal for the club away against Bolton Wanderers on 29 August 2010, and his second opened the scoring in the Second City derby against Aston Villa in January 2011.
Johnson's header set up the opening goal for Nikola Žigić as Birmingham City defeated favourites Arsenal 2–1 to win the 2011 Football League Cup Final. The Daily Telegraph described him as "an inspiring defensive presence throughout".
On 11 July 2011, Birmingham accepted a bid from Premier League club Wolverhampton Wanderers for Johnson. Two days later, Johnson signed a four-year contract with Wolves. The fee was officially undisclosed, and the club claimed that reports of a £7m fee were inaccurate; the Wolverhampton-based Express & Star newspaper reported that the club had paid "a flat fee with no add-ons" of "just over £4m".
Johnson was almost immediately handed the captaincy of Wolves by Mick McCarthy shortly before the start of the new season, relieving former captain Karl Henry of his duties. The season proved problematic for Johnson and his new team though and McCarthy was sacked in February 2012, following which Johnson said the players had let the manager down. After assistant manager Terry Connor was promoted to fill the vacancy, Johnson featured in only two further matches that season. During March 2012 he was disciplined by the club after turning up for training "unfit to train properly", widely reported as being due to alcohol; the player apologised for his conduct, and retained the captaincy. Later that same month, he had an on-field dispute with teammate Wayne Hennessey.
With the club relegated back to the Championship, new manager Ståle Solbakken brought Johnson back into the team. Solbakken was however dismissed in January 2013, and although Johnson retained his place in the team, once again the club were relegated, meaning Johnson had now been relegated in each of the last three seasons.
With the arrival of Kenny Jackett as Wolves manager, it was announced in June 2013 that Johnson was available for transfer and he was not issued with a squad number. No sale took place during the summer transfer window, and on 16 September, Johnson joined Championship club Sheffield Wednesday on loan for three months. He made 17 loan appearances before the deal expired, but Sheffield Wednesday caretaker manager Stuart Gray confirmed that he was attempting to extend the loan agreement.
On 6 January 2014 he joined Premier League club West Ham United on loan for the remainder of the 2013–14 season. Johnson played six games in all competitions for West Ham, his first coming on 8 January 2014 in a 6–0 away defeat to Manchester City in a semi-final of the League Cup.
Johnson remained at Wolves, now back in the Championship, at the start of the 2014–15 season after the club received no offers during the close season for the player. He was again not issued with a squad number and did not play any first team football during the first half of the campaign. In an interview on Soccer AM, Johnson revealed he trained during afternoons, away from the first team group, but "would probably give up a fair amount of money if I just walked out". On 2 February 2015, the final day of the January transfer window, it was announced that his contract with Wolves had been terminated by mutual consent.
On 3 February 2015, following the termination of his contract with Wolves, Johnson signed a deal with Championship side Charlton Athletic to last until the end of the season. He started 14 of Charlton's remaining 16 matches.
On 12 May 2015, Johnson was released at the end of his contract.
On 18 August 2015, Johnson joined Indian Super League side FC Pune City for the 2015 tournament.
On 4 January 2016, Johnson re-signed for Charlton Athletic on a 18-month contract. He was released in May 2017.As of match played 19 May 2017
Cardiff CityFA Cup runner-up: 2008
Birmingham CityFootball League Cup: 2011
League Two team of the year: 2005–06
Championship team of the year: 2008–09
Johnson was born in Ashford, Surrey. He attended St Michael's Middle School in Colehill, Dorset, and then Queen Elizabeth's School, Wimborne Minster. Together with his brothers, Johnson supported Chelsea; he held a season ticket for ten years. As of 2010, Johnson and his wife at the time Melissa had a daughter named Brooke.