Hmm, maybe I simply nested the XML elements incorrectly (though 
NullPointerException doesn't give much information about the real problem). 
I eventually imported this URL: 

http://tribecafilm.com/api/xomo/films.json

With this code: 


(defn transform-cast-members-into-xml [cast-members-listed-in-a-vector]
  (timbre/spy :debug " return value of transform-cast-members-into-xml "
              (reduce
               (fn [vector-of-xml-elements next-cast-member-as-map]
                   (conj vector-of-xml-elements (xml/element :cast-member {}
                                                             (xml/element 
:film-id {} (get next-cast-member-as-map "film_id"))
                                                             (xml/element 
:cast-member-name {} (get next-cast-member-as-map "name"))
                                                             (xml/element 
:cast-member-title {} (get next-cast-member-as-map "title")))))
                 []
                 cast-members-listed-in-a-vector)))

(defn transform-movie-json-to-vector-of-xml-elements [json-to-convert]
  (timbre/spy :debug "return value of 
transform-movie-json-to-vector-of-xml-elements"
              (reduce
               (fn [vector-of-xml-elements next-json-map]
                 (if (seq next-json-map)
                   (conj vector-of-xml-elements (xml/element :movie {}
                                                             (xml/element 
:thumb_img_url {} (get next-json-map "Thumb_img_url"))
                                                             (xml/element 
:website_url {} (get next-json-map "website_url"))
                                                             (xml/element 
:director {} (get next-json-map "director"))
                                                             (xml/element 
:youtube_url {} (get next-json-map "youtube_url"))
                                                             (xml/element 
:title {} (get next-json-map "title"))
                                                             (xml/element 
:runtime {} (get next-json-map "runtime"))
                                                             (xml/element 
:_id {} (get next-json-map "_id"))
                                                             (xml/element 
:categories {} (st/join "," (get next-json-map "categories")))
                                                             (xml/element 
:description {} (get next-json-map "description"))
                                                             (xml/element 
:cast {} (transform-cast-members-into-xml (get next-json-map "cast")))))
                   vector-of-xml-elements))
               []
               json-to-convert)))

(defn json-to-xml [request]
  (let [string-to-convert (slurp 
"http://tribecafilm.com/api/xomo/films.json";)
        json-to-convert (json/read-str string-to-convert)
        vector-of-xml-elements 
(transform-movie-json-to-vector-of-xml-elements json-to-convert)
        final-xml-element (xml/element :movies {} vector-of-xml-elements)
        page-string (xml/emit-str final-xml-element)
        response-headers {:status 200
                          :headers {"Content-Type" "text/plain"}
                          :body page-string }]
    response-headers))







On Friday, March 22, 2013 12:02:25 PM UTC-4, larry google groups wrote:
>
> Thank you. 
>
> I need to import this json and convert it to XML or CSV:
>
> http://tribecafilm.com/api/xomo/films.json
>
> I'm guessing that the problem is the nested vector of cast members, which 
> my project manager has asked me to flatten (I think she is planning work 
> with this in Microsoft Excel, eventually). 
>
> I start with rows like this: 
>
>   ;;
>   ;; {
>   ;;         "Thumb_img_url":"https:\/\/s3.amazonaws.com
> \/tribeca_cms_production\/uploads\/uploads\/film\/photo_1\/513a82d1c07f5d4713000077\/small_odayaka__1_PUBS.jpg",
>   ;;         "website_url":"",
>   ;;         "director":"",
>   ;;         "large_img_url":null,
>   ;;         "youtube_url":"",
>   ;;         "title":"Odayaka",
>   ;;         "runtime":"100",
>   ;;         "id":"513a82d1c07f5d4713000077",
>   ;;         "categories":["Drama"],
>   ;;         "description":"The Great East Japan Earthquake has just 
> struck, the waters of the ensuing tsunami finally rolling back into the 
> sea. In the comparative safety of Tokyo, two wives and a child living in 
> the same apartment building have nothing to do but wait for their 
> husbands\u2019 return. Nobuteru Uchida finds a striking emotional core to 
> the shock of March 11, 2011, crafting a tender and intelligent narrative on 
> the internal effects of an unspeakable national tragedy.",
>   ;;         "cast":
>   ;;         [
>   ;;         {
>   ;;                 "_id":"513a82d1c07f5d4713000078",
>   ;;                 "film_id":"513a82d1c07f5d4713000077",
>   ;;                 "name":"Jo Keita,
>   ;;                  Aya Saito",
>   ;;                 "title":"Associate Producer"
>   ;;         },
>   ;;         {
>   ;;                 "_id":"513a82d1c07f5d4713000079",
>   ;;                 "film_id":"513a82d1c07f5d4713000077",
>   ;;                 "name":"Kiki Sugino,
>   ;;                  Yukiko Shinohara,
>   ;;                  Takeshi Yamamoto,
>   ;;                  Ami Watanabe,
>   ;;                  Yu Koyanagi,
>   ;;                  Makiko Watanabe",
>   ;;                 "title":"Cast"
>   ;;         },
>   ;;         {
>   ;;                 "_id":"513a82d1c07f5d471300007a",
>   ;;                 "film_id":"513a82d1c07f5d4713000077",
>   ;;                 "name":"Shinichi Tsunoda",
>   ;;                 "title":"Cinematographer"
>   ;;         },
>   ;;         {
>   ;;                  "_id":"513a82d1c07f5d471300007b",
>   ;;                 "film_id":"513a82d1c07f5d4713000077",
>   ;;                 "name":"Jo Keita",
>   ;;                 "title":"Composer"
>   ;;         },
>   ;;         {
>   ;;                  "_id":"513a82d1c07f5d471300007c",
>   ;;                 "film_id":"513a82d1c07f5d4713000077",
>   ;;                 "name":"Nobuteru Uchida",
>   ;;                 "title":"Director"
>   ;;         },
>   ;;         {
>   ;;                 "_id":"513a82d1c07f5d471300007d",
>   ;;                 "film_id":"513a82d1c07f5d4713000077",
>   ;;                 "name":"Nobuteru Uchida",
>   ;;                 "title":"Editor"
>   ;;         },
>   ;;         {
>   ;;                 "_id":"513a82d1c07f5d471300007e",
>   ;;                 "film_id":"513a82d1c07f5d4713000077",
>   ;;                 "name":"Kousuke Ono",
>   ;;                 "title":"Executive Producer"
>   ;;         },
>   ;;         {
>   ;;                  "_id":"513a82d1c07f5d471300007f",
>   ;;                 "film_id":"513a82d1c07f5d4713000077",
>   ;;                 "name":"Kiki Sugino,
>   ;;                  Eric Nyari",
>   ;;                 "title":"Producer"
>   ;;         },
>   ;;         {
>   ;;                 "_id":"513a82d1c07f5d4713000080",
>   ;;                 "film_id":"513a82d1c07f5d4713000077",
>   ;;                 "name":"Nobuteru Uchida",
>   ;;                 "title":"Screenwriter"
>   ;;         }        
>   ;;         ]
>   ;; },
>
>
> I flattened this by inventing keys for the nested cast members. But now my 
> different rows have different keys. I guess I should pad this so they all 
> have the same rows? Or maybe I've missed something obvious? Seems like I 
> shouldn't have to engage in ugly hacks for something this simple. 
>
>
>
>
> On Friday, March 22, 2013 11:37:31 AM UTC-4, Gary Verhaegen wrote:
>>
>> I would guess the NPE comes from the form (xml/emit-str 
>> (xml/map->Element next-movie-as-map)), given that (conj nil nil) does 
>> not throw. 
>>
>> Perhaps try to isolate the problem in a smaller chunk of code, and 
>> then file a bug with the data.xml library? 
>>
>> On 21 March 2013 19:16, larry google groups <lawrenc...@gmail.com> 
>> wrote: 
>> > 
>> > I am getting a null pointer exception in the line where I conj into the 
>> > vector. I added the pprint so I could see what was going on. I am 
>> confused 
>> > by the outcome: 
>> > 
>> > (defn convert-json-to-xml [json-as-flat-maps] 
>> >   (reduce 
>> >    (fn [vector-of-strings next-movie-as-map] 
>> >      (println "next move as map: ") 
>> >      (println (pp/pprint next-movie-as-map)) 
>> >      (if (seq next-movie-as-map) 
>> >        (conj vector-of-strings (xml/emit-str (xml/map->Element 
>> > next-movie-as-map))) 
>> >        vector-of-strings)) 
>> >    [] 
>> >    json-as-flat-maps)) 
>> > 
>> > The pprint is showing me this: 
>> > 
>> > {:film_64209.9096316473 "513e67e3c07f5dd745000051", 
>> >  :cast_member_64209.9096316473 "5148c50dc07f5db42300003a", 
>> >  :title_64209.9096316473 "Sound design", 
>> >  :director "", 
>> >  :runtime "5", 
>> >  :movie-id "513e67e3c07f5dd745000051", 
>> >  :title "Two Islands", 
>> >  :thumb 
>> > 
>> > "
>> https://s3.amazonaws.com/tribeca_cms_production/uploads/uploads/film/photo_1/513e67e3c07f5dd745000051/small_TWO_ISLANDS_2_pubs.jpg";,
>>  
>>
>> >  :categories ["Documentary"], 
>> >  :youtube_url "", 
>> >  :website_url "", 
>> >  :name_64209.9096316473 "Svante Colérus", 
>> >  :description 
>> >  "Two Islands is film about two enormous waste dumps in New York City. 
>> The 
>> > first was once the largest dump in the world. The other, a cemetery of 
>> > unknowns, is still in use. Two Islands bluntly asks, what does the 
>> existence 
>> > of these two huge mountains of economic and social waste and rejected 
>> > surplus tell us about our civilization and the so-called richest nation 
>> in 
>> > the world? What kind of legacy will future archaeologists see?"} 
>> > 
>> > 
>> > Any thoughts about what triggers a null pointer exception? I am using 
>> this 
>> > XML library: 
>> > 
>> > http://clojure.github.com/data.xml/ 
>> > 
>> > 
>> > 
>> > 
>> > 
>> > 
>> > -- 
>> > -- 
>> > You received this message because you are subscribed to the Google 
>> > Groups "Clojure" group. 
>> > To post to this group, send email to clo...@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+u...@googlegroups.com 
>> > For more options, visit this group at 
>> > http://groups.google.com/group/clojure?hl=en 
>> > --- 
>> > You received this message because you are subscribed to the Google 
>> Groups 
>> > "Clojure" group. 
>> > To unsubscribe from this group and stop receiving emails from it, send 
>> an 
>> > email to clojure+u...@googlegroups.com. 
>> > For more options, visit https://groups.google.com/groups/opt_out. 
>> > 
>> > 
>>
>

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to