如何使用Cheshire自定义编码器以JSON格式打印EDN输出



我是Clojure的新手,我正试图使用Cheshire自定义编码器为java中定义的类将EDN输出打印为有效的JSON格式。

My EDN file:
{:xyz #XyzBuilder "testString"}

Clojure code:
(defn getXyz [str]
(.getXyz (XyzBuilder.) str)
)
(defn custom-readers []
{'xyz/builder getXyz}
)
(add-encoder com.java.sample.Xyz
(fn [c jsonGenerator]
(.writeString jsonGenerator (str c))))
(edn/read-string
{:readers (custom-readers)}
(slurp filename)
)

这会产生以下输出:

{"xyz":"Xyz(sampleString=testString)"}

我想以正确的JSON格式打印它,如下所示。我怎样才能做到这一点?

{"xyz":{"sampleString":"testString"}}

提前感谢!

如果您的java对象主要由字段组成,请尝试先将其转换为clojure映射,然后使用chechires的encode-map

(add-encoder com.java.sample.Xyz
(fn [c jsonGenerator]
(-> c 
clojure.java/from-java        ;; convert java object to clojure map
(select-keys [:sampleString]) ;; select only relevant fields
(encode-map jsonGenerator)))) 

相关内容

  • 没有找到相关文章

最新更新