Кодировать байтовый массив Clojure в JSON
Мне нужно кодировать байтовый массив Clojure в JSON. Я пытался сделать это с помощью функции add-encoder Чешира, например:
(add-encoder [Ljava.lang.Byte encode-seq)
Проблема в том, что читатель всегда жалуется на непревзойденный разделитель. Я пытаюсь кодировать что-то вроде следующего:
{:bytes #<byte[] [B@9de27c>}
Но это всегда дает мне
JsonGenerationException Cannot JSON encode object of class: class [B: [B@9de27c cheshire.generate/generate (generate.clj:147)
Поэтому я пытаюсь добавить пользовательский кодировщик. Я даже делаю это правильно?
1 ответ
Решение
В то время как Clojure будет разрешать буквенные символы, содержащие .
как класс Java, названный символом, вы не можете указывать классы массива как литералы Clojure, потому что читатель интерпретирует [
как знак, обозначающий начало вектора. Как предлагает этот поток, самый краткий способ получить класс байтового массива был бы:
(add-encoder (Class/forName "[B") encode-seq)