【问题标题】:Turning SQL Korma results into json将 SQL Korma 结果转换为 json
【发布时间】:2014-05-22 10:04:09
【问题描述】:

我正在使用 SQL Korma 在数据库上运行一些简单的示例,并尝试使用 Cheshire 将其转换为 JSON。

当我只返回 1 条记录时,这很有效,但当我有超过 1 条结果时会引发错误。

这里有两个功能:

(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 是一个 Hashmap:

(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 会根据记录的数量返回不同的类型(这将有助于我更好地理解这一点),其次 - 我应该如何处理?

【问题讨论】:

    标签: json clojure korma


    【解决方案1】:

    您似乎缺少一个函数调用。试试这个:

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

    【讨论】:

    • 谢谢 - 你能快速解释一下为什么这需要在函数调用中吗?这是因为 x 是一种辩护吗?
    • 您将 x 绑定到函数,而不是函数调用的结果。您应该将 x 更改为 (def x (get-rooms)),并保留 (generate-string x)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2011-06-26
    • 2018-05-09
    • 2016-11-21
    相关资源
    最近更新 更多