본관은 강릉(江陵). 자는 성첨(聖瞻). 김홍주(金弘柱)의 증손으로, 할아버지는 김시환(金始煥)이고, 아버지는 이조판서 김상성(金尙星)이며, 어머니는 이태제(李泰躋)의 딸이다.
1757년(영조 33)에 정시 문과에 병과로 급제, 수찬이 되었으나 1761년에 경현당(景賢堂)의 『대학(大學)』 강의에 불참한 죄목으로 파직되었다. 1763년에 다시 부교리에 올라 집의·응교·승지 등을 지내고, 1767년에는 대사간이 되었다. 그 뒤 대사헌을 거쳐 1781년(정조 5) 형조판서가 되어 형조의 관장사무·판결 및 처형에 관한 절차의 관리를 통일적으로 체계화하기 위하여 낭관 박일원(朴一源)에게 위촉하여 『추관지(秋官志)』를 편찬하게 하였다. 또한, 『국조보감(國朝寶鑑)』의 찬집당상도 겸임하였다.
1784년 청나라 사신이 돌아갈 때 반송사(伴送使)가 되었으며, 뒤에 벼슬이 이조판서에 올랐고 우참찬으로 죽었다. 편서로는 1782년(정조 6) 강화유수 겸 삼도수군통어사로 발탁되어 강화부에 부임하여 정족산성을 다시 쌓고 펴낸『강화부지(江華府誌)』가 있다.