如何在HugSQL结果中将返回的映射转换为json csv

时间:2019-04-04 03:05:53

标签: clojure hugsql

我正在尝试使用HugSQL从数据库中选择一些记录,然后取回记录 尝试以下代码时,我遇到了几个问题:

f/attempt-all [_ (println  "Getting DB records")
                    db-records (oracle-db/get-records my-db)
;hangs here when there are large(100,000k+) records

-- :name get-records
select /*+ index(src_ski_sysevents_au SRC_SKI_SYSEVENTS_AU_IDX_A)*/ * from src_ski_sysevents_au where week_id='201903' AND ROWNUM <'10000'

实际结果: db-records具有一个映射列表(返回的每个记录的映射),如下所示:

({:remarks nil, :timeprocessing 1994-01-01 00:00:00.000, :devicetype 3M, :staffcode 0M, 
           :timedeletion 1994-01-01 00:00:00.000, :occurred 1M, :syseventdesig Ticket jam, :time 2019-01-14 10:47:37.350, :syseventno 27M, 
  :devicedesig P4 LH Exit Wilga ST - 49, :devicenoprocessing 0M, :component nil, :lotabbr P3P4, :deviceabbr P4 LEX WIL, 
  :week_id 201903M, :lotdesig P3, P4 Levels, :dss_update_time #inst "2019-01-14T15:48:46.000000000-00:00", :loaded_new_yn N, 
  :operatorfirstname nil, :quantity 1M, :systemeventregno 7365M, :pdi_batch_id 697410M, :lotno 1M, :deviceno 49M, :deleted_yn N, 
  :centre_no 0012000, :lot_no 0012001, :operatorsurname unattended, :operatornoprocessing 0M}
  ...
)

我想知道如何将地图列表转换为Json字符串文件或CSV文件以将其推送到我的端点。处理

之类的非字符串值时

:timeprocessing 1994-01-01 00:00:00.000

我将这个测试字符串放入具有无效数字格式的(comment (def testmap {input_test_Data}))中进行测试后,立即发现了这些错误,并且我也发现

:dss_update_time在我的数据库中是“ 15 / JAN / 19”

但是在HugSQL结果中,我得到了这样的信息

:dss_update_time #inst“ 2019-01-14T15:48:46.0​​00000000-00:00”

基本上如何确保我能取回所有数据 至少在问题的第二部分,我们将非常感谢您的帮助。谢谢

1 个答案:

答案 0 :(得分:0)

请使用函数prn而不是println打印出示例数据行。然后您会看到日期值实际上是字符串(prn不会像println那样删除双引号字符)。

那时,您可以只使用常规的EDN-> JSON转换。 a simple function中有the Tupelo library

(t/edn->json  {:a 1  :b 2})
;=> {"a":1,"b":2}

只是在后台使用Cheshire lib,并自动执行关键字<->字符串转换。