Кодировать байтовый массив 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)
Другие вопросы по тегам