Johnson signed with the Tampa Bay Devil Rays as a non-drafted free agent on June 29, 2002 out of Thatcher High School in Thatcher, Arizona and began his professional career with the Princeton Devil Rays rookie level team in Princeton, West Virginia. In 2005, he played for the Visalia Oaks of Visalia, California. In the same season, Johnson got promoted to class AA with the Montgomery Biscuits, then in 2007 moved to the Durham Bulls to play with the class AAA minor league affiliate. Johnson made the Tampa Bay Rays opening day roster for the 2008 season. On April 5, 2008, he made his debut against the New York Yankees as the team's designated hitter. He had four at bats and recorded his first major league hit, a single off of Andy Pettitte. He had three hits in 19 at-bats over seven games for the Devil Rays that season before he was sent back down to Durham. He spent the next two seasons in the minors, missing 2 months in 2009 with a fractured thumb. In 2010, he hit.319 for Durham and was selected to appear in the Triple-A All-Star game. He was also named the Bulls most valuable player. John Romano of The St. Petersburg Times wrote in March 2011 that he was likely one of three players competing for two spots on the Rays bench, with the other two being outfielder Sam Fuld and first baseman Casey Kotchman. Johnson made the opening day roster, along with Fuld. On May 15, 2011, he hit his first major league home run against Baltimore Orioles pitcher Jake Arrieta. On August 12, 2011 he was one of 5 Rays to hit solo home runs off CC Sabathia in a 5-1 Tampa Bay victory. Johnson was designated for assignment on February 5, 2013. In part of three seasons with the Devil Rays/Rays, he hit.223 with 10 homers and 50 RBI.
Johnson was acquired by the Kansas City Royals on February 12, 2013 from the Rays as the player to be named later in the James Shields trade. He was designated for assignment on August 15, 2013 and released on August 19. In 79 games, he hit.179.
Atlanta Braves
Johnson was claimed off waivers by the Atlanta Braves on August 22, 2013. He played in his first game as a Brave on the same day. In his first four at bats, Johnson singled twice. He hit his first RBI as a Brave three days later on August 25, 2013. After the season, Johnson was non-tendered by the Braves, making him a free agent. In 32 games, he hit.261.
Cleveland Indians
On January 27, 2014 Johnson signed a minor league contract with the Cleveland Indians. The contract included an invitation to Major League Spring Training. On March 22, it was announced that Johnson had made the opening day roster, however he was designated for assignment on May 3, after appearing in just seven games with two hits in 19 at-bats. Johnson cleared waivers on May 9, and was sent to the Triple–A Columbus Clippers. He elected free agency in October 2014.
Johnson signed a minor league deal with the Texas Rangers on February 23, 2015. On March 31, he was traded to the Los Angeles Dodgers in exchange for cash considerations. The Dodgers assigned him to the AAA Oklahoma City Dodgers, where he played in 55 games and had a batting average of.244.