У меня есть стандартная карта вещей clojure. Ключи — это ключевые слова, а значения — произвольные значения. Это могут быть nil
, числа, строки или любые другие объекты/классы JVM.
Мне нужно знать, как закодировать эту карту в JSON, чтобы «обычные» значения сопоставлялись с обычными значениями JSON (например, ключевые слова -> строки, целые числа -> числа JSON и т. д.), а значения любого другого класса сопоставлялись с строковые представления этих значений, например:
{
:a 1
:b :myword
:c "hey"
:d <this is an "unprintable" java File object>
}
кодируется таким образом:
{ "a": 1, "b": "myword", "c": "hey", "d": "#object[java.io.File 0x6944e53e foo]" }
Я хочу сделать это, потому что моя программа представляет собой библиотеку синтаксического анализа CLI, и я работаю с вызывающей стороной библиотеки, чтобы создать эту карту, поэтому я точно не знаю, какие типы данных будут в ней. Тем не менее, я хотел бы все равно вывести его на экран, чтобы помочь вызывающему абоненту в отладке. Я пытался наивно отдать эту карту Чеширу, но когда я это делаю, Чешир продолжает задыхаться с этой ошибкой:
Exception in thread "main" com.fasterxml.jackson.core.JsonGenerationException: Cannot JSON encode object of class: class java.io.File: foo
Бонус: я пытаюсь снизить количество зависимостей и уже проверил cheshire в качестве моей библиотеки JSON, но полный балл, если вы можете найти способ сделать это без него.