본관은 온양(溫陽). 자는 기천(祈天), 호는 사어(四於). 정염(鄭염)의 후손이며, 정순양(鄭純陽)의 증손으로, 할아버지는 정수연(鄭壽淵)이고, 아버지는 정광은(鄭光殷)이다. 어머니는 김시경(金愼慶)의 딸이다.
1757년(영조 33) 정시문과에 을과로 급제, 출사하여 1762년에 지평이 되고, 1763년에 호서감운어사(湖西監運御史)로 나가 조운(漕運)의 실태를 살폈다. 이어 정언이 되었을 때 일시 귀양간 일이 있고, 그 뒤 김천도찰방(金泉道察訪)으로 나갔다. 1766년 부교리 재임 중 협잡했다는 죄로 삭직되었으나 혐의가 없어 다시 복직되었다. 2년 뒤에 수찬이 되었으며, 1772년에는 대사간에 올랐다.
정조가 즉위하자 승지로서 고부 겸 청시승습부사(告訃兼請諡承襲副使)가 되어 청나라로 건너가는 도중에 열하(熱河)에서 관향은(管餉銀) 1,000냥을 분실한 사건으로 일행과 함께 파직되었으나 곧 다시 등용되어, 1777년(정조 1) 대사헌이 되었다. 이 때 조정을 청신하게 할 것, 재정을 절약할 것, 기강을 확립할 것, 언로를 열어놓을 것, 현관의 대우를 개선할 것, 인재를 양성할 것 등을 상소하여 정조에게 청납되고 녹비를 하사받았다.
그 뒤 방백으로 함경감사가 되어 재해지의 전결(田結)을 임의로 분배한 사건 때문에 일시 파면되었다가, 다시 경상도관찰사에 임명되었다. 경상도관찰사로 있을 때인 1785년 선조인 정렴 · 정작(鄭碏) 등의 유문을 보유하여 간행, 그들의 행적과 도가적 분위기를 전하였다.
1790년 선혜청제조로 있을 때 양전의 필요성을 상소하여 부분적인 시행을 보았다. 이후 사직을 거쳐 예조판서로 승진했다가 일시 사퇴한 뒤 다시 판중추부사에 이르렀다. 1782년 『송도지(松都誌)』와 『송도잡기(松都雜記)』의 두 책을 합편, 증보했고, 특히 왕명으로 1784년 『동문휘고(同文彙考)』를 찬집하였다.
다음해에는 『십구사략통고(十九史略通攷)』를 편집하는 등 학자 · 문장가로서 인정받았다. 1806년(순조 6) 우의정 김달순(金達淳)이 사사되고 김한록(金漢祿) 등에게 역률(逆律)이 추시될 때 이에 연좌되었다.