Many thanks!

On Mar 30, 12:11 pm, Alan <a...@malloys.org> wrote:
> (keyword "abcdef") => :abcdef
>
> (defn metric-diff [metric & json-objs]
>   (apply - (map (comp :value (keyword metric)) json-objs)))
>
> Probably does what you want.
>
> On Mar 30, 12:04 pm, Avram <aav...@me.com> wrote:
>
>
>
> > hi,
>
> > I have 2 report files in JSON format like below:
>
> > # file 1: a.json
> > { "abcdef" : { "value" : "10" }
>
> > # file 2: b.json
> > { "abcdef" : { "value" : "20" }
>
> > I am using clojure.contrib.json to read each file, and I want a
> > function that takes in the 2 structures and a metric name (e.g.
> > abcdef).  The function will then look up abcdef in each structure,
> > find the value of each, and compute the difference.  I am running into
> > an issue, however, that the function needs to take in a string (e.g.
> > "abcdef") but convert this to a keyword (e.g. :abcdef ).
>
> > Thus I am looking for the opposite of as-str in
> > clojure.contrib.string, i.e. something that takes a string and creates
> > a keyword.
> > Or perhaps there is a better way?
>
> > This is what I have so far:
>
> > (use 'clojure.contrib.json)
> > (import 'java.io.FileReader)
> > (def report1 (clojure.contrib.json/read-json (FileReader.
> > "a.json" )) )
> > (def report2 (clojure.contrib.json/read-json (FileReader.
> > "b.json" )) )
>
> > ;; Seek out the values from report1 and report2 for the metric desired
> > ( e.g. :abcdef), and
> > ;; compute the difference
> > ;;------------------------------------------------------------------------- 
> > ----
> > (defn compute-metric-diff [ json1 json2 :metric ]
> >    (- (:value (json1 :metric )) (:value (json2 :metric))))
>
> > user=> (defn compute-metric-diff [ json1 json2 :metric ]
> >    (- (:value (json1 :metric )) (:value (json2 :metric))))
> > java.lang.Exception: Unsupported binding form: :metric (NO_SOURCE_FILE:
> > 58)
>
> > ;; I want to be able to call it like so
> > (compute-metric-diff report1 report2 "abcdef" )
>
> > Any help appreciated.
>
> > Many thanks,
> > Avram

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to