본관은 안동(安東). 자는 사안(士安), 호는 퇴석(退石). 김상헌(金尙憲)의 현손, 아버지는 통덕랑(通德郎) 김창복(金昌復), 어머니는 인동장씨(仁同張氏) 장서주(張瑞周)의 딸이다.
문벌이 혁혁(赫赫)한 집안에 태어났지만 그의 할아버지인 수능(壽能)은 서출이라 과거에 급제하고도 현감에 그쳤다. 14세 때에 아버지를 사별하고, 가난에 시달려 학문에 전념하지 못하다가 47세 때인 1753년(영조 29)에야 사마시에 합격하여 진사가 되었다.
57세 때인 1763년에는 통신사행(通信使行)의 종사관인 김상익(金相翊)의 서기(書記)로 뽑혀 통신사 조엄(趙曮)과 함께 일본에 다녀왔다. 1764년 일본에 다녀온 기행사실을 가사형식으로 「일동장유가」를 지었다. 그뒤 지평현감(砥平縣監) 등의 벼슬을 지냈다. 저술로는 역시 일본기행을 한문으로 지은 『동사록(東槎錄)』이 있다.