The Proteas have already clinched the series after taking an unassailable 3-0 lead when they edged to a four-run victory on the Duckworth/Lewis method in Bloemfontein on Tuesday.
They won that game without the rested Jacques Kallis and Hasim Amla, who was on paternity leave and has since become the father to a baby boy, and another key man has been handed a break for the final two games, Dale Steyn.
Wayne Parnell has come in instead as the hosts made two changes, with the other seeing Vernon Philander rewarded for his outstanding introduction to test cricket by coming in ahead of Albie Morkel.
The Sri Lankans have opted for three changes themselves, with Mahela Jayawardene, ruled out through a back injury earlier in the week, replaced by Lahiru Thirimanne.
Sachithra Senanayake comes in for his international debut, while Thisara Perera also plays. The remaining two players to miss out are Dhammika Prasad and Kosala Kulasekara.
Teams
South Africa - Graeme Smith, Alviro Petersen, Colin Ingram, AB de Villiers (captain, wk), JP Duminy, Faf du Plessis, Robin Peterson, Vernon Philander, Wayne Parnell, Morne Morkel, Lonwabo Tsotsobe.
Sri Lanka - Tillakaratne Dilshan (captain), Upul Tharanga, Kumar Sangakkara (wk), Dinesh Chandimal, Lahiru Thirimanne, Angelo Mathews, Sachithra Senanayake, Thisara Perera, Nuwan Kulasekara, Lasith Malinga, Rangana Herath.
South Africa have won the toss and elected to bat in the 4th ODI against Sri Lanka at De Beers Diamond Oval in Kimberley.
South Africa took an unassailable 3-0 lead in the one-day international series (ODI) against Sri Lanka