McDonald graduated from East Lyme High School in East Lyme, Connecticut. When he was not drafted by any major league baseball team in his initial draft year, he attended University of Connecticut Avery Point Campus, where he was NJCAA Division II All-American in 1994 as shortstop. He went on to play at Providence College in 1995 and 1996 on a partial scholarship, earning All-New England honors as a member of one of the last baseball teams before the college discontinued its baseball program. After he was drafted in 1996, he left Providence to pursue a career in professional baseball although he was still several courses short of earning a degree. He earned his degree in 2010
McDonald was drafted in the 12th round of the 1996 Major League Baseball draft (363rd overall) by the Cleveland Indians, and entered the Indians' minor league system. In 1996, he played for the Watertown Indians of the Single A New York–Pennsylvania League, then moved to the Kinston Indians of the Single A Carolina League in 1997. In 1998, he was invited to the Indians' spring training camp, and moved up to the Akron Aeros of the Double A Eastern League, where his defensive plays at shortstop made him a popular player with the fans. McDonald split 1999 between Akron and the Buffalo Bisons of the Triple A International League and was also called up to the major leagues for a short stint. McDonald also appeared in a number of games for the Indians in 2000 and 2001, spending the remainder of each season in Buffalo.
McDonald made his major league debut for Cleveland on July 4, 1999, and appeared in 18 games for the Indians that season. He appeared in 9 games for the Indians in 2000, another 17 games in 2001, and in 2002, he made his move to the Indians' roster, appearing in 93 games. The Indians, taking advantage of McDonald's popularity in Akron, used McDonald in promotions there to draw Aeros fans to Cleveland.
After three full seasons with the Indians, McDonald was traded to the Toronto Blue Jays on December 2, 2004, in exchange for Tom Mastny. In his six full and partial seasons with Cleveland, McDonald batted .231, with a fielding average of .971.
During the first part of the 2005 season with the Blue Jays, McDonald was primarily a backup for Russ Adams at shortstop, and recorded a .290 batting average in 37 games.
He was traded to the Detroit Tigers on July 22 for future considerations. During the remainder of the season with Detroit, McDonald hit .260 with a .308 on-base percentage in 31 games.
On November 10, 2005, the Tigers sent him back to the Toronto Blue Jays for cash considerations, in effect completing the earlier trade by trading John McDonald for himself. Only three other players have been traded for themselves in this manner (Harry Chiti, Dickie Noles, and Brad Gulden).
During the 2006 season, McDonald was the starting shortstop for the Toronto Blue Jays. On July 25, 2006, he hit his first career grand slam in a game against the Seattle Mariners and also drove a career high five runs. Although McDonald showed good defensive skills, his offensive hitting skills were weak—he had a .223 batting average, a .271 slugging percentage and a .308 on-base percentage during the 2006 season.
In an attempt to inject some stronger hitting into the shortstop position, the Blue Jays obtained Royce Clayton in the off-season, and McDonald and Clayton started the 2007 season sharing shortstop duties. McDonald also started some games at third base as Troy Glaus's backup. Later in the season, after demonstrating his strong defensive abilities, McDonald replaced Clayton as the everyday starting shortstop, and Clayton was subsequently released. McDonald took the opportunity as starting shortstop to make some exceptional defensive plays (often in conjunction with fellow infielders Aaron Hill and Lyle Overbay). He was considered by some baseball writers to be a Gold Glove contender after leading AL shortstops with a .986 in fielding percentage. (Orlando Cabrera was subsequently chosen.) Due in large part to his defensive abilities, McDonald received a 2-year contract extension from the Blue Jays reportedly worth $3.8 million.
In a poll of viewers on Rogers Sportsnet, McDonald was voted the most popular Blue Jay, narrowly edging out Cy Young-winning pitcher Roy Halladay.
Despite his contract extension, McDonald again started another season, 2008 as the back-up shortstop due to the Blue Jays' off-season acquisition of all-star shortstop David Eckstein. However, when Eckstein was traded to the Arizona Diamondbacks on August 31, McDonald once again became the starting shortstop.
At the start of the 2009 season, McDonald again found himself the back-up shortstop, this time behind newly acquired Marco Scutaro. However, McDonald once again became the starting shortstop when Scutaro was injured late in the season.
McDonald had a batting average of .258 in 2009. His slugging percentage of .271, on-base percentage of .384 and 4 home runs were career highs.
On November 25, 2009, the Blue Jays re-signed McDonald to a 2-year $3-million dollar contract.
In the 2010 season, McDonald again began as the back-up shortstop, this time behind Yunel Escobar. McDonald missed much of the month of June to spend time with his ailing father, who would eventually pass away. McDonald returned to the lineup on June 20, Father's Day, hitting a home run in his only at-bat. McDonald hit a career high 6 home runs in 2010, passing his previous season high of 4.
McDonald started the 2011 season as a non-starting utility bench player, able to enter the game as a pinch runner, or as a replacement infielder or left fielder. He also occasionally started as an infielder when the manager wants to give the regular starting player a day off. (For example, on July 1, 2011 he started at second base in order to give Aaron Hill a day off, but when shortstop Yunel Escobar left the game in the first inning after being hit by a pitch, McDonald moved to shortstop.)
On April 22, 2011, McDonald came into a game against the Tampa Bay Rays to replace an injured Jayson Nix, and hit his first career walk-off home run, a 2-run homer in the 11th inning.
On May 28, 2011, McDonald was placed on the 15-day disabled list with a strained right groin. Mike McCoy was called up to take his place. McDonald was activated from the DL on June 17, 2011.
While in Toronto, McDonald was popularly known in the media and by Blue Jays fans as "Johnny Mac". Due to some of his outstanding defensive plays, local media also dubbed him "Magic Man" (the title of a popular 1976 hit song by Heart), and "The Prime Minister of Defence" (a word play on the similarly named first prime minister of Canada, John A. Macdonald).
On August 23, 2011, McDonald, was traded to the Arizona Diamondbacks, along with teammate Aaron Hill, for Kelly Johnson. During his time in Arizona, McDonald served as the Diamondbacks' primary shortstop following the trade in 2011 but shared his duties with Willie Bloomquist and Stephen Drew in 2012.
On November 2, 2011, the Diamondbacks re-signed McDonald to a 2-year $3-million dollar contract.
On March 20, 2013, McDonald was traded to the Pittsburgh Pirates. McDonald was placed on the disabled list on May 15 with a low back strain. On May 27, McDonald started a rehab assignment with the Triple-A Indianapolis Indians.
On June 10, 2013, McDonald was traded to the Cleveland Indians for a player to be named later or cash considerations. On June 26, McDonald was designated for assignment when Asdrúbal Cabrera was activated from the disabled list. McDonald was used as a defensive replacement during his short return to Cleveland, and was hitless in 7 at-bats.
McDonald was traded to the Philadelphia Phillies on June 27, 2013, in exchange for cash considerations or a player to be named later. On August 24, McDonald appeared as a pitcher for the first time in his career, and struck out Tuffy Gosewisch in his 1⁄3 of an inning.
On August 31, 2013, McDonald was traded to Boston Red Sox in exchange for minor league pitcher Nefi Ogando. As McDonald was acquired prior to September 1, he was eligible to play in the postseason. He appeared in 6 games for the Red Sox in the regular season, hitting .250 in 8 at-bats. McDonald was not included on the postseason roster, but following the Red Sox' 2013 World Series victory, was awarded a World Series ring.
On January 16, 2014, McDonald signed a minor league contract with the Los Angeles Angels, with an invitation to attend their spring training camp to try out for a utility infielder position. He was placed on the active roster for the start of the regular season.
On January 7, 2015, McDonald announced his retirement from professional baseball.
McDonald met his wife-to-be, Maura, in a freshman English class at Providence College in 1995. They have two children, Jacqueline and Anthony.
When McDonald left Providence College in 1996, he was only six courses shy of earning his degree. Encouraged by his wife to complete his studies while still playing baseball, he enrolled in Providence College School of Continuing Education in 2006, and graduated with a Bachelor of Arts degree in Liberal Studies in 2010. He was able to accept his degree from the college president on July 13, 2010, during the annual break for the Major League Baseball All-Star Game.