       (log/debug (str "Number of expressions that that need to be translated: " (.size results)))
       (map (fn [result]
              {:surface (:surface result)
-              :structure (deserialize (read-string (:serialized result)))})
+              :structure (json-read-str (.getValue (:structure result)))})
            results))))
 
 (defn read-one [spec language]

        json-spec (json/write-str (strip-refs json-input-spec))
        ]
    (log/debug (str "looking for expressions in language: " language " with spec: " spec))
    (let [results (db/exec-raw [(str "SELECT surface,serialized::text 
                                        FROM expression 
                                       WHERE active=true 
                                         AND language=? 

            ;; one (random) expression.
            ;; instead, we should use the target.surface as an input to a hash function; that is,
            ;; ORDER BY the value of the hash function on each row.
            (let [results (db/exec-raw [(str "SELECT structure,surface "
                                             "  FROM expression "
                                             " WHERE active=true "
                                             "   AND language=? "
