The Rays pounded out 17 hits and built a 12-4 lead through seven innings, then had to sweat out the victory when Baltimore produced a six-run eighth.
Both teams had lost their previous two games and Baltimore's skid was extended due chiefly to the struggles of starting pitcher Jason Hammel (5-2).
Tampa Bay overcame an early 3-1 deficit with a four-run third that included Johnson's home run.
Johnson also had an RBI single and Desmond Jennings had a two-run base hit during the Rays' four-run fifth and they tacked on three more in the sixth with Yunel Escobar contributing a two-run single.
Tampa Bay starter Jeremy Hellickson (2-2) was credited with the win even though he gave up eight runs on 10 hits in 7 2/3. Hellickson was finally taken out during Baltimore's big eighth inning, during which Chris Dickerson hit a three-run homer.
Joel Peralta was called on to record the final out in the eighth and also worked the ninth for his first save. Hammel surrendered seven runs on 10 hits in 4 2/3.
Senate Democrats to pull all-nighter on climate change
Interpol investigating stolen passports on missing flight