(define (json->csv in-file out-file)
  (let ((keys (with-input-from-file in-file
		(lambda ()
		  (non-nested-keys (read-json (read-line)))))))
    (with-output-to-file out-file
      (lambda ()
	;; Write the csv header
	(write-csv (list keys))
	(call-with-input-file in-file
	  (lambda (in)
	    (let loop ((in in) (result '()))
	      (receive (object remainder)
		  (read-json in consume-trailing-whitespace: #f chunk-size: (* 5 1024))
		(if object
		    (loop remainder (cons object result))
		    (for-each (lambda (curr-result)
		    		(write-csv (list (alist->nested-list
						  curr-result keys))))
		    	      result))))))))))