【问题标题】:How to print EDN output in JSON format using Cheshire custom encoder如何使用 Cheshire 自定义编码器以 JSON 格式打印 EDN 输出
【发布时间】:2020-06-05 10:31:04
【问题描述】:

我是 Clojure 的新手,我正在尝试使用针对 java 中定义的类的 Cheshire 自定义编码器将 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"}}

提前致谢!

【问题讨论】:

  • 尝试使用您当前拥有(str c) 的部分。另外,试试柴郡的encode-map 的作用。

标签: clojure clojure-java-interop edn cheshire


【解决方案1】:

如果您的 java 对象主要由字段组成,请先尝试将其转换为 clojure map,然后使用 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)))) 

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 2020-06-15
    • 2012-02-05
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2013-03-05
    相关资源
    最近更新 更多