Southampton 0 Bristol City 1
Johnson struck seven minutes after half-time as City bounced back from being booed off by their own fans in last weekend's 4-1 mauling at home to Reading.
Southampton looked to have escaped when Dele Adebola hit the crossbar from close range, but the rebound fell kindly for David Noble, who set up Johnson to pick out the top left corner.
City had the better of a dour first half and were gifted the chance to take the lead when Alex Pearce gave away a penalty for a needless handball.
Former Wolves star Michael McIndoe confidently stepped up to the spot but was denied his fourth goal of the season by a smart save from Southampton goalkeeper Kelvin Davis.
Davis guessed the right way, throwing himself to his left to turn the ball behind for a goal-kick.
Davis was on hand to deny McIndoe again a minute before half-time, saving with his legs to block the midfielder's driven right-foot shot.
City almost extended their lead in the 48th minute when defender Jamie McCombe's header was stopped on the line by Davis.
Southampton substitute Jason Euell should have done better four minutes later when he raced on to Adam Lallana's through ball but fired wide with only Adriano Basso to beat.
Teenage full debutant Oscar Gobern had a tough introduction to life in the Championship, but came within inches of nicking a share of the spoils when he curled a left-foot shot wide from the edge of the penalty area 18 minutes from time.
David McGoldrick missed Southampton's best chance in the 76th minute when he shot inches wide of the left post from six yards.