I don't use clojure.java.jdbc, so this may be non-idiomatic or just wrong,
but have you tried something like

(with-open [connection (jdbc/db-connection *db*)]
  (json/write-str
    (jdbc/query {:connection connection}
      ["SELECT * FROM..."])))



On Tue, Oct 1, 2013 at 8:13 PM, Christian Jauvin <cjau...@gmail.com> wrote:

> 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>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.**Jdbc4Arra**y
>>>>   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/**quest**ions/19103870/jsonify-a-**jdbc4a**
>>>>> rray-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.**
>>>>> Jdbc4Arra**y 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
>>>
>>> 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<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<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.
>



-- 
http://elhumidor.blogspot.com/

-- 
-- 
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