본관은 경주(慶州). 자는 관지(貫之), 호는 노암(魯庵). 김광재(金光載)의 증손으로, 할아버지는 김응허(金應虛)이며, 아버지는 김경룡(金慶龍)이다. 신지제(申之悌)·정경세(鄭經世)·이명준(李名俊)의 문하에서 수학하였다.
1624년(인조 2) 생원시·진사시에 모두 합격하고, 이듬해 별시 문과에 장원으로 급제하였다. 1628년 정언(正言)이 되고, 1630년 지평(持平)을 거쳐 진주목사가 되었다. 1635년 다시 정언이 되었으며, 1636년 병자호란이 일어나자 순찰사의 종사관(從事官)으로 일하였다.
전쟁이 끝나자 가장 먼저 패전의 책임을 들어 김류(金鎏)·윤방(尹昉) 등을 탄핵하였으며, 이듬해 직강(直講)·지평을 지냈다. 그 해 소현세자(昭顯世子)가 심양(瀋陽)에 볼모로 잡혀갈 때 사서로서 수행하였다.
당시, 조선인으로서 청나라에 잡혀간 뒤 벼슬에 올라 조선에 대해 갖은 횡포를 부리던 정명수(鄭命壽)·김돌이(金突伊) 등을 청나라로 하여금 제거하게 하는 계획을 정뇌경(鄭雷卿)과 함께 세웠다가 뜻을 이루지 못하고 송환되어 영덕으로 유배되었다.
1643년에 풀려나 1651년(효종 2) 수찬(修撰)이 되고, 교리(校理)를 거쳐 1657년 울산부사를 지냈다. 1660년 자의대비(慈懿大妃)의 효종 상복에 대해 허목(許穆)과 함께 3년설을 주장하여 평해에 유배되었다가 이듬해 풀려났다. 저서로 『노암문집(魯庵文集)』이 있다.