The Columbus Blue Jackets selected Johnson with their third round selection, 85th overall, at the 2001 NHL Entry Draft. He was assigned to the American Hockey League (AHL)'s Syracuse Crunch upon turning professional in 2003, but appeared in 29 games with the Blue Jackets in the 2003–04 NHL season.[1] He made his NHL debut on December 2, 2003, against the Anaheim Ducks and earned his first NHL point with an assist two nights later against the Nashville Predators.[2] He spent the majority of the following two seasons with the Crunch, but appeared in 26 games with Columbus in 2005–06 before earning a regular role with the team the following year, a season in which he scored three goals and 10 points in 61 games.[1]
Johnson left Columbus as a free agent, signing with the New York Islanders for the 2007–08 season. He appeared in 30 games for the Islanders, but missed 35 more due to a knee injury.[5] Allowed to go again to free agency, Johnson frequently switched teams as a journeyman defenceman. He signed with the Chicago Blackhawks for 2008–09 with whom he appeared in 35 games.[5] Chicago traded Johnson to the Calgary Flames on October 7, 2009, in exchange for Kyle Greentree.[6] A series of injuries to Calgary's defencemen gave Johnson an opportunity to play,[7] but he was on the move again after 22 games with the Flames.[1]
Calgary sent Johnson to the Edmonton Oilers, along with a draft pick, in exchange for Steve Staios on March 3, 2010. The trade was notable for being the first time the two Battle of Alberta rivals completed a trade in the Flames' 30-year history.[8] Johnson appeared in 19 games for the Oilers and recorded seven points.[1] Leaving the Oilers, Johnson played the entire 2010–11 season in the AHL with the Milwaukee Admirals, before returning to the Blue Jackets for the 2011–12 season where he recorded a career high 16 points in 56 games.[5] Following a ten-game stint with the Boston Bruins in 2012–13, Johnson signed with the New York Rangers for the 2013–14 season.[2] He was assigned to their AHL affiliate, the Hartford Wolf Pack and named the team captain. Hartford was the 12th different team Johnson played for in his professional career.[9]
On July 3, 2014, Johnson left the Rangers organization after one season and agreed to a one-year contract as a free agent with the Ottawa Senators.[10] He was assigned to their AHL affiliate the Binghamton Senators, where he was also named captain.
On September 25, 2015, Johnson, as a free agent, returned to the Calgary Flames organization, agreeing to a one-year AHL contract with affiliate, the Stockton Heat.[11]
On June 17, 2016, Johnson signed his first contract overseas, a one-year contract with Adler Mannheim of the German top-tier Deutsche Eishockey Liga (DEL).[12] On March 17, 2017, Johnson signed a one-year contract extension with Mannheim.[13]
On July 26, 2018, Johnson left Germany after two years and agreed as a free agent to a two-year deal with English club the Sheffield Steelers of the EIHL.[14]
Johnson was due to remain in Sheffield for the 2020-21 season as a player/assistant coach, but the campaign was cancelled due to the coronavirus pandemic.[15][16] In July 2021, Sheffield confirmed Johnson would not return to the club.[17]
In October 2021, Johnson began working as a team relationship specialist for the NHL team which first drafted him, the Columbus Blue Jackets.[18]