A simple method to serialize and deserialize hash-tables.

Upstream URL


Eric Diethelm <>



Trivial Hash-Table Serialization Manual


pipeline status Quicklisp


This simple library allows for simple serialization and deserialization of hash-tables.

Installing trivial-hashtable-serialize

This project is available in the latest QuickLisp distribution, so installing it is reduced to calling:

(ql:quickload :trivial-hashtable-serialize)

Working Example

The code block below shows how to export/import a simple hashtable using the default serialization methods. Keep in mind, that this default does simply (format) the key and value. This makes serialization of keywords and strings erroneous. To overcome this limitation, use a more elaborate (de)serialization function, as described further below.

(let ((table (make-hash-table)))
  (setf (gethash 'a table) 9)
  (setf (gethash 'b table) 8)
  (setf (gethash 'c table) 7)
  (save-hashtable table "~/hashtable-export.txt"))

(let ((imported (load-hashtable "~/hashtable-export.txt")))
  (format t "Value of 'a is: ~a~%" (gethash 'a imported))
  (format t "Value of 'b is: ~a~%" (gethash 'b imported))
  (format t "Value of 'c is: ~a~%" (gethash 'c imported)))

As mentioned before, here a better implementation of the serialize function using trivial-json-codec.

(defun json-serialize-fn (stream key value)
  (declare (type stream stream))
  (format stream "~a~%" (trivial-json-codec:serialize-json (list key value))))

(defun json-deserialize-fn (line)
  (let ((r (trivial-json-codec:deserialize-json line)))
    (values (car r) (cadr r))))

(let ((table (make-hash-table)))
  (setf (gethash "a" table) '(1 2 3))
  (setf (gethash "b" table) '(4 5 (7 8)))
  (setf (gethash "c" table) (make-array 4 :initial-contents '(7 6 5 4)))
  (save-hashtable table "~/hashtable-export-json.txt" :serialize-fn #'json-serialize-fn))

(let ((imported (load-hashtable "~/hashtable-export-json.txt" :deserialize-fn #'json-deserialize-fn)))
  (format t "Value of 'a' is: ~a~%" (gethash "a" imported))
  (format t "Value of 'b' is: ~a~%" (gethash "b" imported))
  (format t "Value of 'c' is: ~a~%" (gethash "c" imported)))

Exported Symbols


    Serializes the hash-table TABLE into the file identified by FILE-NAME. A non-default serialization function can be given through SERIALIZE-FN.

    The signature of SERIALIZE-FN is (function (stream key value) null).


    Read the contents of FILE-NAME and deserialize it into a new hash-table. IF-DOES-NOT-EXIST accepts the same values as the equaly named key in WITH-OPEN-FILE. DESERIALIZE-FN can be defined to use a non-default serialization function.

    The signature of DESERIALIZE-FN is (function (line) (values key value)).

License Information

This library is released under the MIT License. Please refer to the LICENSE to get the full licensing text.

Contributing to this project

Please refer to the CONTRIBUTING document for more information.

Dependencies (1)

  • split-sequence

Dependents (1)

  • GitHub
  • Quicklisp