Johnson was drafted by the Washington Nationals in the fifth round of the 2016 Major League Baseball draft.[6] In his first professional season in 2016, Johnson hit .265 with a home run and 14 RBIs over 62 games for the Auburn Doubledays. The Nationals reportedly believed in Johnson's potential not just to stick in center field at higher professional levels, but to produce double-digit home runs as he developed.[7]
Johnson was assigned to the Hagerstown Suns for the 2017 season.[7] Almost right away, Johnson demonstrated significantly greater power and hitting ability with the Suns, hitting ten home runs by the end of May and posting a batting average above .300.[8] Johnson's prowess earned him a spot on the South Atlantic League's Northern Division All-Star team, alongside teammate Carter Kieboom.[9] On July 24, 2017, he was promoted to the Advanced-A Potomac Nationals of the Carolina League.[10] A midseason ranking of prospects by MLB Pipeline that month placed Johnson as the Nationals' tenth-best prospect.[11] Johnson finished the 2017 season with a .298 batting average, 22 home runs, 72 RBIs. and 22 stolen bases across both levels, appearing in 130 total games.[12] He was named the Nationals' Minor League Player of the Year for 2017.[13] In 2018, Johnson battled injuries, but still managed to appear in 89 games for the Harrisburg Senators, slashing .267/.321/.410 with six home runs and 31 RBIs.[14]
Johnson was added to the Indians' 40–man roster following the 2019 season.[18] He made the Indians' Opening Day roster for the 2020 season.[19] Johnson made his major league debut on July 25, going hitless in three at-bats.[20] He batted .083 with no home runs or RBI over 12 at-bats in 2020.
Johnson was designated for assignment by the newly-named Cleveland Guardians on November 19, 2021.[22] After clearing waivers, he was outrighted to the Triple-A Columbus Clippers on November 24, 2021.[23]
He began the 2022 season with Triple-A Columbus. In 17 games, he hit .217/.217/.377 with 3 home runs and 11 RBI.
New York Mets
On May 25, 2022, Johnson was traded to the New York Mets in exchange for cash considerations.[24] Johnson played in 14 games for the Triple-A Syracuse Mets, limping to a .136/.167/.227 line with one home run and 6 RBI. He was released on July 24.
Washington Nationals (second stint)
On July 29, 2022, Johnson signed a minor league contract with the Washington Nationals organization. Johnson played in 26 games for the Triple-A Rochester Red Wings, hitting just .189/.275/.256 with one home run and 8 RBI. He elected free agency on November 10, 2022.
San Diego Padres
On February 23, 2023, Johnson signed a minor league contract with the San Diego Padres organization.[25] In 126 games split between the Double–A San Antonio Missions and Triple–A El Paso Chihuahuas, he batted a cumulative .271/.348/.469 with 19 home runs, 73 RBI, and 30 stolen bases. Johnson elected free agency following the season on November 6.[26]
Baltimore Orioles
On January 23, 2024, Johnson signed a minor league contract with the Baltimore Orioles.[27] In 118 games for the Triple–A Norfolk Tides, he slashed .259/.320/.448 with 21 home runs, 76 RBI, and 17 stolen bases. On September 21, the Orioles selected Johnson's contract, adding him to their active roster.[28] He made one appearance for Baltimore, grounding out in his only at–bat. On October 31, Johnson was removed from the 40–man roster and sent outright to Norfolk, but rejected the assignment in favor of free agency.[29]