The England winger, who was allowed to join the Black Cats from City in a £10million summer move, embarrassed former team-mate Joe Hart with a dipping 53rd-minute strike which beat him at the near post.
However, the winner was not without controversy with the visitors adamant they should have been awarded a free-kick for a foul on Pablo Zabaleta during the build-up.
Hart also had to turn away Steven Fletcher's skidding effort and keep out Stephane Sessegnon 10 minutes from time, although Sunderland keeper Simon Mignolet also played his part with saves from Yaya Toure and David Silva before the break and Sergio Aguero after it.
Vincent Kompany's header came back off the crossbar in the eighth minute and Toure's goalbound follow-up was hacked away by Mignolet.
The Belgian had to be at his best once again with 24 minutes gone after Carlos Tevez and Aguero combined to put Silva in on goal, only for Mignolet to block his effort from close range.
But seconds later Hart had to dive to his right to turn away Fletcher's rasping left-foot drive.
Sunderland picked up where they had left off and took the lead with eight minutes of the half played.
City boss Roberto Mancini and Zabaleta were left appealing in vain for a free-kick for Craig Gardner's challenge on the full-back but Johnson picked up possession and cut inside before blasting in a dipping shot.
Mignolet excelled himself to deny Aguero one on one but it was Hart in the firing line with 10 minutes remaining when Sessegnon was played in by substitute Fraizer Campbell with the keeper coming out on top.