The Marlins have won back-to-back games for the first time since June 2-3. They had lost 16 of 19 games before putting together their consecutive victories.
Johnson (5-5) went six innings while striking out six. He gave up four hits, one of them a homer by Hunter Pence.
The Phillies have lost three in a row to fall behind Miami into last place in the National League East.
Cliff Lee (0-5) gave up six runs on 10 hits in 4 2/3 innings to take the loss. He remained winless in 13 starts this year after going 17-8 with the Phillies in 2011.