如何使用Cheshire自定义编码器以JSON格式打印EDN输出 [英] How to print EDN output in JSON format using Cheshire custom encoder

查看:75
本文介绍了如何使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆