Hi Philippe, The Jdbc4Array that's causing me trouble is not the "outer" one, returned from jdbc/query: that one seems to be properly handled by json/write-str.
The problem happens with a Postgres table containing a text[] column: create table something ( something_id serial primary key, list_of_something text[] ) In that case the query returns an ("inner") array for each record, and it gets converted to a Jdbc4Array, which, when passed to the JSON writer, causes the problem. Querying a table without a PG array works perfectly fine though. On Tuesday, October 1, 2013 4:21:33 PM UTC-4, Philippe Guillebert wrote: > > Hi, > > You probably need to realize your query using (doall (jdbc/query ...)) > > Also, I was wondering, depending on your needs, you could convert > Jdbc4Array into a native type (vector ?) as a post-processing function of > your query and forget about registering JSON writers. > > > > On Tue, Oct 1, 2013 at 9:00 PM, Christian Jauvin > <cja...@gmail.com<javascript:> > > wrote: > >> Hi Roman, >> >> This approach works for java.sql.Timestamp, which was another type for >> which a JSON writer wasn't defined in my case. >> >> For org.postgresql.jdbc4.Jdbc4Array however, there's something missing, >> because I get: >> >> *org.postgresql.util.PSQLException: This connection has been closed.* >> >> As the person answering me on Stack Overflow suggested, it seems that the >> resultset should be somehow processed before the connection is closed, but >> I really don't know how to do given the construct I'm currently using: >> >> (json/write-str >> (jdbc/query *db* >> ["SELECT * FROM .."])) >> >> where and how could I intercept the resultset that way? Thanks. >> >> >> >> On Tuesday, October 1, 2013 12:49:10 PM UTC-4, r0man wrote: >>> >>> I think you need to implement the JSONWriter protocol for the >>> Jdbc4Array class, and possibly for the datatypes that are in the >>> array. This for example makes the json library aware of >>> java.util.Date classes. >>> >>> (extend-type java.util.Date >>> JSONWriter >>> (-write [date out] >>> (-write (str date) out))) >>> >>> Something like this (not tested): >>> >>> (extend-type org.postgresql.jdbc4.**Jdbc4Array >>> JSONWriter >>> (-write [array out] >>> (-write (seq (.getArray array)) out))) >>> >>> Roman >>> >>> >>> On Tuesday, October 1, 2013 3:57:02 PM UTC+2, Christian Jauvin wrote: >>>> >>>> Hi, >>>> >>>> I asked this question on Stack Overflow yesterday: >>>> >>>> I want to jsonify the results of a query performed against a Postgres >>>> table containing a column of type text[], but the problem is that >>>> clojure.data.json.write-str doesn't seem to know how to handle PG >>>> arrays: >>>> >>>> *Exception Don't know how to write JSON of class >>>> org.postgresql.jdbc4.Jdbc4Array >>>> clojure.data.json/write-generic* >>>> >>>> Do I have to supply a custom handler, or is there a simpler way? >>>> >>>> >>>> http://stackoverflow.com/**questions/19103870/jsonify-a-** >>>> jdbc4array-in-clojure<http://stackoverflow.com/questions/19103870/jsonify-a-jdbc4array-in-clojure> >>>> >>>> I'm asking it here in the hope of getting (maybe) a simpler solution, >>>> or at least one I can implement readily, because the problem I have with >>>> one of the suggestions I received (extending org.postgresql.jdbc4.** >>>> Jdbc4Array to implement the missing function) is that I don't know how >>>> to make it work with my usage pattern, which is simply: >>>> >>>> (json/write-str >>>> (jdbc/query *db* >>>> ["SELECT * FROM ..."])) >>>> >>>> How do I "get the array before the connection is closed" with such a >>>> construct? Is there another way? >>>> >>>> -- >> -- >> 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<javascript:> >> 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 <javascript:> >> 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 <javascript:>. >> For more options, visit https://groups.google.com/groups/opt_out. >> > > > > -- > Philippe > -- -- 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.