The 32-year-old has played mostly in the outfield and at catcher in the past, but the Pirates plan to use him at first base, a position he has played in just two big league games.
"John is enthusiastic about playing in Pittsburgh and developing as a first baseman," Pirates general manager Neal Huntington said. "We feel he has the ability to play the position at the major league level."
Pedro Alvarez, who shifted from third base to first for the 2015 season, became a free agent when Pittsburgh declined to offer a 2016 contract.
Jaso will earn $4 million in each of the next two seasons under the deal announced Wednesday. He can make an additional $1 million annually in performance bonuses.
He spent last season with the Tampa Bay Rays, hitting .286 with five homers and 22 RBIs in 216 plate appearances. He sprained his left wrist in the first inning on Opening Day when he walked and slid into Baltimore's Ryan Flaherty at second base while trying to advance. Jaso did not return until July 7.