Johnson committed to Kansas after receiving offers from Cincinnati and Connecticut. He was a bench player his first two years and played sparingly. As a junior, he was moved into the starting lineup and contributed to the national runner-up team. He had five points, two steals, and a rebound in the final 3:12 in a win against Purdue in the NCAA Tournament. Johnson averaged 10.2 points, 3.2 rebounds and 3.5 assists per game on the season. As a senior, Johnson averaged 9.9 points and 4.6 assists per game. Kansas went 31-6. He had a career-high 39 points against Iowa State, including an emphatic dunk in the closing seconds to lift the Jayhawks to a 108-96 overtime win. After the game, Johnson received death threats. In the Sweet Sixteen of the 2013 NCAA Tournament against Michigan, Johnson made a costly turnover with under a minute to go in regulation. In overtime, he was assessed a technical foul and missed the final shot in an 87-85 loss.
Professional career
On August 15, 2013, Johnson signed with the Polish team Anwil Wloclawek for a one-year contract. However, Anwil released him before the start of the season, and he moved to another Polish clubRosa Radom for the 2013–14 season. On August 26, 2014, Johnson signed with Panelefsiniakos of the Greek Basket League for the 2014–15 season. In September 2015, he signed with Pertevniyal of the Turkish Basketball Second League. On February 24, 2016, he left Pertevniyal and signed with Anadolu Efes for the rest of the season. On August 8, 2016, Johnson signed with Cibona of Croatia for the 2016–17 season. On November 27, 2016, he left Cibona and signed with Israeli club Hapoel Tel Aviv. However, one month later, he was released by Hapoel before appearing in a game for them. On January 4, 2017, he signed with German club s.Oliver Würzburg for the rest of the 2016–17 Basketball Bundesliga season. Only eight days later, he parted ways with Würzburg after suffering a shoulder injury. He played in only game for club. On February 1, 2017, he signed with Istanbulspor Beylikduzu of the Turkish Basketball First League. On July 27, 2017, Johnson signed with the Italian LBA club Vanoli Cremona for the 2017–18 LBA season. On October 24, 2017, Johnson parted ways with Cremona before appearing in a game for them to join the Israeli team Hapoel Gilboa Galil, signing a one-month contract as injury cover for D'Angelo Harrison and J'Covan Brown. On May 12, 2018, Johnson returned to Gilboa Galil for the rest of the season. On June 3, 2018, Johnson recorded a season-high 26 points, shooting 9-of-13 from the field, along with 4 rebounds, 3 steals and 2 assists in a 105–107 playoff loss to Hapoel Jerusalem. Johnson helped Gilboa Galil to reach the 2018 Israeli League Playoffs, where they eventually were eliminated by Hapoel Jerusalem. On October 29, 2018, Johnson signed with the Rethymno Cretan Kings of the Greek Basket League. In 15 games played for Rethymno, he averaged 11.2 points, 3.0 rebounds, 2.3 assists and 1.0 steals per game. On July 21, 2019, Johnson returned to Israel for a second stint, signing with Maccabi Ashdod for the 2019–20 season. On October 21, 2019, Johnson recorded 23 points in his second game with Ashdod, while shooting 7-of-11 from the three-point range, along with five rebounds, six assists and three steals in an 83–76 win over Hapoel Tel Aviv.