The England international had been told that he was free to leave Eastlands in order to find more regular first-team football.
Several clubs, including Tottenham Hotspur, Liverpool and Everton were reported to be interested in signing the 25-year-old.
However, Sunderland have secured Johnson's signature ahead of their Premier League rivals, with the former Middlesbrough player returning to the North East for an undisclosed fee.
Johnson, who scored 11 times in 73 league appearances during his two-and-a-half-year stay with the Citizens, follows Wolverhampton Wanderers striker Steven Fletcher to the Stadium of Light after the Scot completed his £12m move earlier today.
Scott Sinclair has been heavily touted as a replacement for Johnson, with City believed to be nearing an agreement with Swansea City for the winger.