Как мне преобразовать возвращенные карты в json csv в результатах 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-файл, чтобы передать его в мою конечную точку. При обработке нестроковых значений, таких как
: обработка времени 1994-01-01 00:00:00.000
Я вижу ошибки для них, как только я помещаю эту тестовую строку, чтобы проверить в (comment (def testmap {input_test_Data}))
с неправильным форматом чисел, и я также обнаружил, что
:dss_update_time в моей БД "15/ ЯНВ /19"
но в результатах HugSQL я получаю что-то вроде этого
:dss_update_time #inst "2019-01-14T15:48:46.000000000-00:00"
В основном, как я могу гарантировать, что я верну все данные? Буду очень признателен за помощь по второй части моей проблемы, по крайней мере. Спасибо
1 ответ
Пожалуйста, используйте функцию prn
вместо println
распечатать образец строки данных. Тогда вы увидите, что значения даты на самом деле являются строками (prn
не удалит двойные кавычки как println
делает).
В этот момент вы можете просто использовать обычное преобразование EDN->JSON. В библиотеке Tupelo есть простая функция:
(t/edn->json {:a 1 :b 2})
;=> {"a":1,"b":2}
который просто использует библиотеку Cheshire под обложками и автоматически выполняет преобразование строки ключевого слова<->.