Keshad Johnson of the Miami Heat has won the NBA Slam Dunk contest after beating San Antonio rookie Carter Bryant in the final.