【发布时间】:2020-09-04 23:57:12
【问题描述】:
我有一个标准的 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 解析库,并且我正在与库的调用者一起构建这个映射,所以我不知道其中将包含哪些类型的数据。但是,我想将它打印到屏幕上,以帮助调用者进行调试。我曾试图天真地将这张地图提供给 cheshire,但是当我这样做时,cheshire 一直因这个错误而窒息:
Exception in thread "main" com.fasterxml.jackson.core.JsonGenerationException: Cannot JSON encode object of class: class java.io.File: foo
奖励:我正在努力减少我的依赖计数,并且我已经审查了 cheshire 作为我的 JSON 库,但是如果你能找到一种方法来完成上述操作,那么我将获得满分。
【问题讨论】: