J'ai une application (plusieurs actuellement) qui décode les données JSON dans une carte en utilisant Jackson. Les données semblent être dans une Map ou une ArrayList (dans le cas de tableaux JSON). Les données qui arrivent sur ces flux ne sont pas structurées, donc cela ne changera pas.Extension de l'abstraction associative de Clojure aux types de bibliothèques Java
Je possède du code Clojure qui accède aux propriétés imbriquées dans ces objets. Idéalement, je voudrais étendre l'abstraction associative à ces types Java afin que get-in
fonctionne sur eux. Quelque chose comme le suivant:
(extend-protocol clojure.lang.Associative
java.util.Map
(containsKey [this k] (.containsKey this k))
(entryAt [this k] (when (.containsKey this k)
(clojure.lang.MapEntry/create k (.get this k))))
java.util.ArrayList
(containsKey [this k] (< (.size this) k))
(entryAt [this k] (when (.containsKey this k)
(clojure.lang.MapEntry/create k (.get this k)))))
Il ya deux problèmes avec ceci; Le premier étant qu'Associatif n'est pas un protocole (si c'était le cas, cela fonctionnerait). La seconde étant que les types sont déjà définis, je ne peux pas ajouter Associative avec deftype. Je suis assez nouveau dans la partie JOP interop de Clojure. Y a-t-il une méthode que je ne vois pas? Ou y at-il un protocole qui enveloppe Associative et fonctionnera avec get-in
que j'ai raté?
Merci SO!
Merci Sam, entendre qu'il n'y a pas vraiment une bonne solution à ce problème est utile. Je suis très chanceux dans le fait que tout se résume à une poignée de sites d'appel pour obtenir, et ont adopté une approche similaire actuellement. Je vais probablement mincir davantage et utiliser RT/get sur votre suggestion. Merci! – Cody