After graduating, on June 27, 2009, Johnson was traded to the New York Rangers in exchange for a fifth-round pick in the 2009 NHL Entry Draft. He began his professional career in the 2009–10 season with the Rangers American Hockey League affiliate, the Hartford Wolf Pack. When the Rangers waived Stephen Valiquette to Hartford on December 2, Johnson was recalled to serve as a backup goaltender to Henrik Lundqvist. He made his NHL debut against the Philadelphia Flyers on December 30, 2009 when he replaced Lundqvist after the first period. He allowed a breakaway goal to Simon Gagné on the first shot he faced, after playing for 23 seconds. He finished the game with 17 saves on 20 shots over two periods. He played his first career start against the Atlanta Thrashers and lost 2–1 in overtime.
After spending three years with the Rangers' American Hockey League affiliate club Hartford Wolf Pack/Connecticut Whale, and playing in six NHL games, Johnson became an unrestricted free agent. He signed with the Phoenix Coyotes for a one-year, two-way contract and assigned to the AHL's Portland Pirates. At the beginning of the lock-out shortened 2012–13 season, starting goaltender Mike Smith suffered a lower body injury. Johnson was called up to provide backup to Jason LaBarbera. After spending two games as a backup, on January 28, 2013, Johnson was called on to start in goal against the Nashville Predators. In his first NHL start since January 31, 2010, seventh overall, he earned first star accolades by stopping all 21 shots he faced on his way to his first NHL career shutout.
On July 5, 2013, Johnson was signed as a free agent to a one-year contract with the Boston Bruins. Johnson was the team's backup goaltender, behind Tuukka Rask, marking his first full-time NHL job.
On July 1, 2014, Johnson was signed as a free agent to a two-year, $2.6 million contract with the New York Islanders. During his time with the club, Johnson posted an record.
On March 2, 2015, he was traded along with a draft pick to the Buffalo Sabres in exchange for Michal Neuvirth., but he did not play for the Sabres until the 2015–16 season. On December 17, 2015 Johnson recorded a 44-save shutout, breaking the Sabres franchise record for most saves in a regular season shutout, which had been held by Ryan Miller.
As a free agent from the Sabres, on July 1, 2016, Johnson joined his sixth NHL club in signing a one-year contract with the Calgary Flames. Johnson began the 2016–17 season, initially serving Brian Elliott as the backup, before he was elevated to shared starts through the midpoint of the year. Johnson would later return to his backup status in completing the season with 18 wins in 36 games. Johnson made his first NHL playoff appearance in Game 4 of the Stanley Cup Playoffs against the Anaheim Ducks, in relief of Elliot. The Flames would lose the game, 3-1, and get swept out of the playoffs. On June 17, 2017, Johnson was as an impending free agent was traded back to former club, the Arizona Coyotes, in the Flames acquisition of Mike Smith. Included in the trade largely for 2017 NHL Expansion Draft considerations, he was dealt alongside prospect Brandon Hickey and a conditional 3rd round pick.
Return to Buffalo
Johnson went to market as a free agent from the Coyotes, and promptly signed a one-year, $2.5 million contract for a second stint with the Buffalo Sabres on July 1, 2017. In the 2017–18 season, Johnson was unable to replicate his previous season with club, in winning just 10 of 36 games, he was unable to steer the Sabres from a last place finish in the league.
St. Louis Blues and Anaheim Ducks
On July 1, 2018, Johnson opted to move on from the Sabres and agreed to a one-year, $1.75 million contract with the St. Louis Blues. In the 2018–19 season, Johnson as the club's backup to Jake Allen, appeared in 10 games as the Blues struggled to start the campaign. After collecting just two wins, Johnson was placed on waivers by the Blues and was claimed by the Anaheim Ducks on December 11, 2018.