我正在使用SQL Korma在数据库上运行一些简单的示例,并尝试使用Cheshire将其转换为JSON。
当我只返回 1 条记录时,这很有效,但当我有超过 1 个结果时会抛出错误。
以下是 2 个函数:
(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))