Miami will have three days to match once Johnson can officially sign the offer sheet on July 7.
The contract breakdown, designed so the Heat will not match, will be $5.6 million for the first year and $5.9 million for the second year. It will then rise up to approximately $18.9 million for year 3 and $19.6 million for the fourth year.
The cap hit for Brooklyn, however, would be $12.5 million per season. It contains a player option for the fourth year, sources confirmed.
Johnson turned down more money from another team to sign with the Nets, sources said.
Dwayne Wade tweeted his congratulations:
Any kid that wants to be an NBA player & you don't think you have a chance. Look no further then @RealTJohnson Congrts kid you earned it!— DWade (@DwyaneWade) July 3, 2016
Johnson could either start for Brooklyn next to Jeremy Lin (three-year, $36 million agreement) in the backcourt or come off the bench and serve in a sixth man capacity.
The deal was earlier reported by The Vertical.
Heat coach Erik Spoelstra regarded Johnson as a key member of a rapidly developing young core on the team, a unit that also includes 2015 draft picks Justise Winslow and Josh Richardson. Johnson's versatility in the backcourt and his 37.8 percent shooting from 3-point range made retaining the undrafted guard a high priority for the Heat this offseason.
But Johnson endured growing pains last season when he missed nearly three months after undergoing shoulder surgery in February. He averaged 8.7 points, 3.0 rebounds and 2.2 assists in 36 games and also returned to make five appearances in the playoffs at both guard spots.
Information from ESPN's Michael Wallace was used in this report.