Skip to content

Instantly share code, notes, and snippets.

@yogthos
Created April 10, 2012 01:20
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yogthos/2347762 to your computer and use it in GitHub Desktop.
Save yogthos/2347762 to your computer and use it in GitHub Desktop.
Java object reader
(defn primitive? [o]
(some #{true}
(map
(partial isa? (.getClass o))
[Boolean Character Byte Short Integer Long Float Double String])))
(defn read-object [o]
(when o
(cond
(isa? (.getClass o) java.util.Map)
(reduce
(fn [entries e]
(assoc entries (keyword (.getKey e)) (read-object (.getValue e))))
{} (.entrySet o))
(or (.. o getClass isArray) (isa? (.getClass o) java.lang.Iterable))
(doall (map read-object (seq o)))
(primitive? o) o
:else
(let [fields (.. o getClass getDeclaredFields)]
(reduce
(fn [m f]
(.setAccessible f true)
(assoc m (keyword (.getName f)) (read-object (.get f o))))
{} fields)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment