Johnson went 2 for 4 with two RBIs as the Blue Jays avoided a three-game sweep and rebounded from Wednesday's 16-0 loss.
Travis Snider had two hits and two RBIs, driving in the tying run with a squeeze bunt, and Brett Lawrie scored three runs.
Brandon Lyon (1-0) pitched 1 1-3 innings for his first win since joining Toronto in a 10-player trade with Houston on Friday. Tommy Milone (9-7) gave up eight runs — five earned — and six hits in seven innings with no walks and seven strikeouts as Oakland dropped to 16-3 in July.
ORIOLES 6, RAYS 2
BALTIMORE (AP) — Chris Tillman took a three-hitter into the seventh inning, Chris Davis homered and drove in four runs, and Baltimore avoided a three-game sweep.
Nick Markakis had two hits for the Orioles, who had scored only one run in each of their three previous games. It was just the second time in 10 games that Baltimore scored more than four runs.
Tillman (3-1) allowed two runs, five hits and four walks in six-plus innings.
James Shields (8-7) gave up five runs, six hits and five walks in six innings.
INDIANS 5, TIGERS 3
CLEVELAND (AP) — Asdrubal Cabrera singled home the go-ahead run in a four-run seventh inning as Cleveland rallied to beat Detroit ace Justin Verlander.
Carlos Santana and Travis Hafner tied it at 3 by homering on the first two pitches of the inning by Verlander (11-6).
Joe Smith (7-2) threw two pitches to get the win. He got Miguel Cabrera to ground into an inning-ending double play in the top half.
Vine Pestano pitched the eighth and Chris Perez the ninth for his 29th save in 31 chances.
Jason Kipnis followed Cabrera with another RBI single as Cleveland took two of three in the series, dropping Detroit a half-game behind the idle Chicago White Sox in the AL Central.
Austin Jackson had three hits and Delmon Young homered for Detroit, which lost for only the fourth time in 18 games.
Mariners 4, Royals 1
SEATTLE (AP) — Jason Vargas allowed one hit in eight innings to win his career-high 11th game, and Mike Carp had three hits to lead Seattle.
Vargas (11-7) allowed only a fourth-inning double. He struck out five and walked three.
He retired the first 11 batters he faced before Billy Butler's 200th career double drove in Lorenzo Cain in the fourth. Vargas walked Cain, then fell behind 3-0 before Butler drilled a fastball to the gap in left-centre.
Kansas City did not get a runner to second base against Vargas after the fourth.
Luis Mendoza (4-7) threw five innings, allowed nine hits, four earned runs, walked three and hit a batter.
Tom Wilhelmsen pitched the ninth for his 12th save in 14 opportunities.