将SQL Korma结果转换为json

将SQL Korma结果转换为json,json,clojure,korma,Json,Clojure,Korma,我正在使用SQLKorma在DB上运行一些简单的示例,并尝试使用Cheshire将其转换为JSON 当我只返回了一条记录时,这种方法效果很好,但当我有多条结果时,就会抛出一个错误 以下是两个功能: (defn get-room [id] (first (select room (where {:id id}) (limit 1)))) (defn get-rooms [] (select room)) 和数据: (def x

我正在使用SQLKorma在DB上运行一些简单的示例,并尝试使用Cheshire将其转换为JSON

当我只返回了一条记录时,这种方法效果很好,但当我有多条结果时,就会抛出一个错误

以下是两个功能:

(defn get-room [id]
    (first (select room
             (where {:id id})
             (limit 1))))

(defn get-rooms []
    (select room))
和数据:

(def x get-rooms)

(def y (get-room 1))
X的类型为testproj.models.db:

(x)
=> [{:created_on "2014-04-05 13:19:47", :id 1, :description "Room 1"} {:created_on "2014-04-05 13:20:17", :id 2, :description "Room 2"} {:created_on "2014-04-05 13:20:20", :id 3, :description "Room 3"}]
因为y是哈希映射:

(pr-str y)
=> "{:created_on \"2014-04-05 13:19:47\", :id 1, :description \"Room 1\"}"
正在尝试转换为Json:

(cheshire.core/generate-string x)
JsonGenerationException Cannot JSON encode object of class: class testproj.models.db$get_rooms: testproj.models.db$get_rooms@507501ff  cheshire.generate/generate (generate.clj:147)

(cheshire.core/generate-string y)
=> "{\"created_on\":\"2014-04-05 13:19:47\",\"id\":1,\"description\":\"Room 1\"}"

为什么korma会根据记录的数量返回不同的类型(这有助于我更好地理解这一点),其次-我应该如何执行此操作?

您似乎错过了一个函数调用。试试这个:

(cheshire.core/generate-string (x))

谢谢-您能否快速解释一下为什么需要在函数调用中使用此选项?这是因为x是防御吗?您将x绑定到函数,而不是函数调用的结果。您应该将x更改为(def x(get rooms)),并保留(generate string x)