Johnson, Marlins beat Cardinals 5-2