본관은 예안(禮安). 자는 종백(宗伯), 호는 단곡(檀谷). 김윤안(金胤安)의 증손으로, 할아버지는 김득선(金得善)이고, 아버지는 김단(金鍴)이며, 어머니는 권극해(權克諧)의 딸이다.
1660년(현종 1) 진사시에 합격한 뒤 1663년 선교랑(宣敎郎)의 신분으로 식년 문과에 병과로 급제하였다. 그 뒤로 지평·정언·헌납·집의 등을 두루 역임하였다. 숙종 초년 집권세력의 한 사람으로서, 1675년에는 김수항(金壽恒)을 탄핵하여 유배시키고, 허목(許穆)과 윤휴(尹鑴)의 대립에는 허목을 편들었다.
1678년 집의로 재직 중에는 사은사(謝恩使)의 서장관으로, 1689년에는 진위 겸 진향사(陳慰兼進香使)의 부사(副使)로서 중국에 다녀왔다. 1680년 경신대출척으로 축출되었다가, 1689년 기사환국 때 승지로 등용되었다. 목민관으로는 경주부윤까지 승진하였다. 문장이 뛰어나고 행동이 의젓하였다.