繁体   English   中英

如何递归使用clojure.core / bean?

[英]How can I use clojure.core/bean recursively?

所以我认为clojure.core / bean非常接近我想要的,但是我正在使用一个嵌套bean的Java应用程序,这样我最终会得到这样的地图:

{:month-total 3835.0 :name "Jan's Meat Diner" :owners #<BarOwner[] [Lcom.fancypants.BarOwner;@1fb332d}

如何,我在Java对象上递归调用bean ,以便我可以让我想象中的BarOwner对象自己作为地图发出:

{:month-total 3835.0 :name "Jan's Meat Diner" :owners { [:name "Jack"] [:name "Jill"] } }

编辑1

我发现clojure/java.datafrom-java可能比bean更适合这种事情。

虽然它可能不是“如何递归使用bean”的理想答案,但在Clojure社区的网站下使用更多更丰富的contrib库确实解决了它。 特别

Clojure的/ java.data

提供简单的递归bean解析,并且可以配置为在毛茸茸的情况下专门处理java类型。 我向其他想要使用bean人推荐这个。

找出什么是豆而不是什么是非常棘手的。 这似乎可以解决bean中的bean和列表属性的问题。 可能你会想要更多的类添加到probably-bean? 功能,也许是对地图属性的一些支持。

(defn probably-bean? [o]
   (and (not (coll? o))
         ((complement #{Class Long String clojure.lang.Keyword}) (class o))))

(defn transf [o]
    (cond
            (instance? java.util.List o) (into [] (map transf o))
            (probably-bean? o) (into {} (seq (bean o)))
            :else o))

(defn to-bean [o]
    (clojure.walk/prewalk #(transf %) o))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM