如何使用Cheshire自定义编码器以JSON格式打印EDN输出 [英] How to print EDN output in JSON format using Cheshire custom encoder
本文介绍了如何使用Cheshire自定义编码器以JSON格式打印EDN输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是Clojure的新手,我正尝试使用Cheshire自定义编码器将EDN输出打印为有效的JSON格式,以用于Java中定义的类.
I am newbie with Clojure and I am trying to print EDN output to valid JSON format using Cheshire custom encoder for classes defined in java.
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格式打印它.我该如何实现?
I want to print it in proper JSON format as below. How can I achieve it?
{"xyz":{"sampleString":"testString"}}
提前谢谢!
推荐答案
如果您的Java对象主要由字段组成,请尝试先将其转换为clojure映射,然后再使用chechires的 encode-map
If your java object consists mostly of fields try to convert it to clojure map first and then use chechires's 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))))
这篇关于如何使用Cheshire自定义编码器以JSON格式打印EDN输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文