Johnson graduated from Lloyd Memorial High School in Erlanger, Kentucky, where he was a four-sport star in football, baseball, basketball and track. He played as a wide receiver for the Lloyd Memorial Juggernauts football team. He earned All-state and All-conference honors as a junior and senior. As a junior, he hauled in 26 catches for 600 yards and six touchdowns. In his senior year, he caught 38 passes for 567 yards and five touchdowns. Johnson was also a star in baseball and track at Lloyd Memorial. Johnson first started playing baseball as a shortstop and pitcher, but switched to football as a junior. In track & field, Johnson lettered all four years competing in sprints and jumps. At the 2007 KHSAA 2A State T&F Meet, he took fourth in the 100-meter dash with a time of 11.05 seconds, while also placing third in the 200-meter dash with a time of 23.13 seconds. In 2010, he captured a regional title in the pole vault after clearing a height of 3.53 meters.
College career
Prior to attending GVSU, Johnson spent one year at Eastern Kentucky University, where he appeared in 11 games and caught three passes for 63 yards. He also attended Antelope Valley College for one year, where he caught 24 passes for 231 yards and three touchdowns. In 2010, Johnson was red-shirted and did not play. As a junior in 2011, he caught 56 passes for 1,030 yards and 15 touchdowns, breaking the 100-yard receiving mark in five games. He was named a first-team All-GLIAC GVSU Offensive Skill Player of the Year and GVSU Offensive Skill Player of the Year. In his senior year, he caught 72 passes for 1,199 yards and 16 touchdowns.
Professional career
Johnson was not invited to perform at the 2013 NFL Combine, but he performed well at GVSU's "Pro Day", as he would have placed among the top performers at the combine in the 40-yard dash, vertical jump and broad jump. Before his Pro Day, he had guaranteed that he'd run a 4.39 in the 40-yard dash.
Green Bay Packers
Johnson was selected in the seventh round with the 216th overall pick by the Green Bay Packers in the 2013 NFL Draft. He spent the preseason with the Packers before being signed to the practice squad on September 2, 2013.
Cleveland Browns
Johnson was signed by the Cleveland Browns off the Packers practice squad on October 12, 2013 four days before being placed on reserved/non-football injury.
Minnesota Vikings
2014 season
On September 20, 2014, the Minnesota Vikings signed Johnson off the Browns' practice squad. After spending the entire 2013 season on the Packers and Browns practice squads, Johnson had a breakout first season for the Vikings in 2014. He was inactive on game day for the opening 2 contests of the season, but ended up playing in 11 games with 6 starts. In Week 5, he appeared in his first career NFL game against the team that drafted him at Green Bay, finishing the game with a catch for seven yards. In his first start against the Green Bay Packers on November 23, he caught his first career touchdown on a 22-yard pass from Teddy Bridgewater. In the Vikings' overtime victory against the New York Jets in Week 14, Johnson contributed to the win with his first-career 100-yard performance, ending the day with 103 yards on 4 catches including a career-long 56-yard touchdown. For the season, Johnson was the Vikings third leading receiver with 31 catches, 475 yards and 2 touchdowns and was named and emerged as a starting receiver for the team replacing Cordarrelle Patterson, who was drafted in the first round of the 2013 draft.
2015 season
Dealing with injuries for the most part of the preseason, Johnson failed to establish himself in the lineup as Mike Wallace earned the starting role in training camp. Johnson ended up starting 4 games while appearing in 11. In the Vikings eighth game of the season against the Chicago Bears, the game was tied 20-20 with just one minute remaining in the fourth quarter. On a 2nd-and-7 with 36 seconds remaining, Bridgewater threw an up-for-grabs pass in Johnson's direction and he hauled it in for a 35-yard gain that set up the game-winning field goal by Blair Walsh. He was inactive for the final 3 games of the season including the Wild Card Playoff game.
2016 season
Following Mike Wallace's departure in the offseason, Johnson was named the starting wide receiver opposite Stefon Diggs for the 2016 season. After three disappointing games to start the season in which he only managed to catch 3 passes for 20 yards, Johnson had a notable game against the New York Giants in Week 4, when he hauled in two passes for 70 yards, with a long of 40 yards.
Carolina Panthers
On March 10, 2017, Johnson signed a one-year contract with the Carolina Panthers. On July 25, 2017, Johnson was waived/injured by the Panthers and placed on injured reserve after having knee surgery.
New York Jets
On April 9, 2018, Johnson signed with the New York Jets. He was released on August 31, 2018.
Orlando Apollos
In 2019, Johnson joined the Orlando Apollos of the Alliance of American Football. On February 17, 2019 against the San Antonio Commanders, Johnson had a staggering 7 catches for 192 yards and 1 touchdown. Johnson holds the record for the most receiving yards in a game in AAF history. Johnson led the AAF in receiving the entire season, totaling 687 yards receiving and five touchdowns on 45 catches in eight games.
After the AAF suspended football operations, Johnson signed a one-year contract with the Philadelphia Eagles on April 9, 2019. He was placed on injured reserve with an ankle injury on August 28, 2019. He was released from injured reserve with an injury settlement on September 7.