              :structure (deserialize (read-string (:serialized x)))})
           results))))
 
-
-
+;; TODO: document why we need this
+;; TODO: verbcoach should use this, not config/json-read-str
+;; TODO: move this to babel/globals.cljc or something similar
+(defn json-read-str [json]
+  (json/read-str json
+                 :key-fn keyword
+                 :value-fn (fn [k v]
+                             (cond
+                              (and (or (= k :english)
+                                       (= k :espanol)
+                                       (= k :français)
+                                       (= k :italiano))
+                                   (not (map? v)))
+                              (str v)
+
+                              (and (string? v)
+                                   (= (nth v 0) \:))
+                              (keyword (string/replace-first v ":" ""))
+
+                              (string? v)
+                              (keyword v)
+                              :else v))))

      
      (GET "/:expr" request
           (let [expr (:expr (:route-params request))]
             (log/info (str "expr(1):" expr))
             (log/info (str "expr(2):" (Integer. expr)))
             {:status 200
              :headers {"Content-Type" "application/json;charset=utf-8"}
              :body (write-str (id2expression (Integer. expr)))}))))

  [:refer-clojure :exclude [get-in resolve]]
  [:require
   [babel.korma :as korma]
   [clojure.string :as string]
   [clojure.data.json :as json :refer [read-str write-str]]
   [clojure.tools.logging :as log]
   [compojure.core :as compojure :refer [GET PUT POST DELETE ANY]]
