In his freshman season at the University of Dayton, Johnson played 34 games, averaging 6.3 points and 5.2 rebounds per game. In his sophomore season, he played 36 games, averaging 11.9 points and 6.9 rebounds per game. In his junior season, he played 36 games, averaging 11.9 points, 6.0 rebounds and 1.6 assists per game. He led the Flyers in steals with 31, free throw percentage and three-pointers made with 77. He finished second on the team in scoring, rebounds and offensive rebounds with 76. He also tied for second on the team in blocks with 14 and ranked third in three-point percentage. He scored in double-figures in 24 of the Flyers' 36 games and led the Flyers in scoring 13 times. He also recorded four double-doubles for the season. In his senior season, he was his team’s co-MVP as he helped lead the Flyers to a 20-13 record and a third straight trip to the NIT. He was at his best against power conference competition: 20 points against Alabama, 18 against Minnesota, 16 against Seton Hall and Ole Miss, 12 against Wake Forest. In 32 games, he averaged 12.4 points, 6.4 rebounds and 1.3 assists per game.
On November 2, 2012, Johnson was selected by the Rio Grande Valley Vipers with the seventh overall pick in the 2012 NBA Development League Draft. On January 23, 2013, he signed a 10-day contract with the Memphis Grizzlies. He made his NBA debut the same day in a win over the Los Angeles Lakers. He signed a second 10-day contract with the Grizzlies on February 3, but returned to the Vipers on February 20 after the contract expired. In July 2013, Johnson joined the NBA D-League Select Team for the 2013 NBA Summer League. On September 30, 2013, he signed with the Brooklyn Nets, but was later waived on October 26 after appearing in seven preseason games. The following month, he re-joined the Rio Grande Valley Vipers.
On January 17, 2014, Johnson signed a 10-day contract with the Boston Celtics. He made his debut for the Celtics four days later, recording 11 points, 3 rebounds, 1 assist and 1 steal in a 93–86 loss to the Miami Heat. He signed a second 10-day contract with the Celtics on January 28, and a multi-year deal on February 7. In July 2014, Johnson re-joined the Celtics for the 2014 NBA Summer League. On September 25, 2014, he was waived by the Celtics. In 40 games, he averaged 6.3 points and 2.4 rebounds in 19.7 minutes.
Philadelphia 76ers (2014)
On September 29, 2014, Johnson signed with the Philadelphia 76ers. He appeared in nine games for the 76ers in 2014–15 before being waived by the team on November 15.
Johnson returned to the Rio Grande Valley Vipers in December 2014, but was quickly picked up by another NBA team, as he signed a 10-day contract with the Utah Jazz on January 28, 2015. On February 7, after his contract expired, the Jazz decided to not re-sign him, and he returned to Rio Grande Valley on February 23. On March 6, 2015, Johnson signed a 10-day contract with the Milwaukee Bucks. He went on to sign a second 10-day contract with the Bucks on March 16. In eight games with the Bucks, he averaged 3.9 points and 1.4 rebounds in 16 minutes. After his second 10-day contract expired on March 26, Johnson was free to sign a multi-year deal with the Utah Jazz. Johnson continued on with the Jazz in 2015–16, and managed his first full NBA season. On October 22, 2016, he was waived by the Jazz. Johnson appeared in 82 games for Utah over two seasons, averaging 3.5 points and 1.8 rebounds in 13.0 minutes per contest.
Return to Rio Grande Valley (2016–2017)
On November 23, 2016, Johnson was reacquired by the Rio Grande Valley Vipers. He averaged 13.5 points and 6.2 rebounds per game during the 2016–17 season. In July 2017, Johnson played for the Indiana Pacers and the Houston Rockets during the 2017 NBA Summer League. He later signed with the Rockets for training camp on September 25, 2017. On October 13, 2017, he was waived by the Rockets.
France (2017–2018)
On November 13, 2017, Johnson signed a one-year deal with the French team BCM Gravelines-Dunkerque. On March 1, 2018, Johnson was named Pro A MVP of the Month for games played in February. In 25 games played during the 2017–18 season, he averaged 15.5 points, 5 rebounds, 1.9 assists and 1.2 steals per game.