Как мне преобразовать возвращенные карты в 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 под обложками и автоматически выполняет преобразование строки ключевого слова<->.

Другие вопросы по тегам