본관은 안동(安東). 자는 백진(伯珍). 할아버지는 김양(金樑)이고, 아버지는 동지중추부사 김광수(金光燧)이며, 어머지는 전주이씨로 감역(監役) 이탁(李倬)의 딸이다.
1624년(인조 2) 사마시에 합격하여 참봉이 되고, 1633년 증광 문과에 병과로 급제하여 전적(典籍)에 등용되었다. 1635년 정언(正言)이 되고, 이듬해 병자호란이 일어나자 남한산성에서 독전어사(督戰御使)가 되었다. 1637년 지평(持平)이 되고, 이듬해에 다시 정언·지평이 되었다.
지평으로 있으면서 공서파(功西派:인조반정 공신)의 언관 이규(李珪)가 청서파(淸西派:서인으로서 반정에 참여하지 않은 계열)인 김상헌(金尙憲)을 탄핵하자 이를 반대하다가 탄핵을 받고 북청판관(北靑判官)으로 좌천되었다. 또한, 흉년이므로 백성들이 곤궁하니 조세와 부역을 감면하고, 여러 관청의 공납을 감하고, 쓸데없는 비용을 줄일 것을 청하였다.
정언으로 있을 때, 대사간 윤강(尹絳), 헌납(獻納) 조복양(趙復陽) 등과 함께 강문성(姜文星)을 귀양보내라는 명을 거둘 것을 간청하였으나 허락받지 못하였다. 1646년 부교리(副校理)가 되었으며, 이듬해 수찬(修撰)으로 암행어사가 되었다. 효종이 즉위하자 장령(掌令)이 되었으며, 삼사(三司)와 세자시강원의 벼슬을 거쳐 현종이 즉위하자 승지가 되었다.
1664년(현종 5) 고양군수로 있을 때 고을을 잘 다스린다 하여 가자(加資: 품계가 오름)되었으며, 뒤에 풍덕부사(豊德府使)를 역임하였다.