Thread: Casting hstore to json

Casting hstore to json

From
Pawel Veselov
Date:
Hi.

I'm trying to cast hstore to json, but I don't seem to be getting a json object from hstore key/value pairs.

9.3 documentation says:
Note: The hstore extension has a cast from hstore to json, so that converted hstore values are represented as JSON objects, not as string values.
to_json(anyelement) - If the data type is not built in, and there is a cast from the type tojson, the cast function will be used to perform the conversion.

On 9.3.5 server:
db=> SELECT '"a"=>1, "b"=>2'::hstore;
       hstore       
--------------------
 "a"=>"1", "b"=>"2"
(1 row)

db=> SELECT to_json('"a"=>1, "b"=>2'::hstore);
           to_json            
------------------------------
 "\"a\"=>\"1\", \"b\"=>\"2\""
(1 row)
db=> SELECT cast(('"a"=>1, "b"=>2'::hstore) as json);
ERROR:  cannot cast type hstore to json
LINE 1: SELECT cast(('"a"=>1, "b"=>2'::hstore) as json);

Thanks!
  Pawel.

Re: Casting hstore to json

From
Adrian Klaver
Date:
On 01/15/2015 07:59 PM, Pawel Veselov wrote:
> Hi.
>
> I'm trying to cast hstore to json, but I don't seem to be getting a json
> object from hstore key/value pairs.
>
> 9.3 documentation says:
> *Note:* The hstore
> <http://www.postgresql.org/docs/9.3/static/hstore.html> extension has a
> cast from hstore to json, so that converted hstore values are
> represented as JSON objects, not as string values.
> to_json(anyelement) - If the data type is not built in, and there is a
> cast from the type tojson, the cast function will be used to perform the
> conversion.
>
> On 9.3.5 server:
> db=> SELECT '"a"=>1, "b"=>2'::hstore;
>         hstore
> --------------------
>   "a"=>"1", "b"=>"2"
> (1 row)
>
> db=> SELECT to_json('"a"=>1, "b"=>2'::hstore);
>             to_json
> ------------------------------
>   "\"a\"=>\"1\", \"b\"=>\"2\""

Works here:

business_app=> select version();
                                                            version


-----------------------------------------------------------------------------------------------------------------------------
  PostgreSQL 9.3.5 on i686-pc-linux-gnu, compiled by gcc (SUSE Linux)
4.8.1 20130909 [gcc-4_8-branch revision 202388], 32-bit
(1 row)


business_app=> SELECT to_json('"a"=>1, "b"=>2'::hstore);
        to_json
----------------------
  {"a": "1", "b": "2"}
(1 row)


Did you upgrade from a previous version of Postgres?

> (1 row)
> db=> SELECT cast(('"a"=>1, "b"=>2'::hstore) as json);
> ERROR:  cannot cast type hstore to json
> LINE 1: SELECT cast(('"a"=>1, "b"=>2'::hstore) as json);
>
> Thanks!
>    Pawel.
>


--
Adrian Klaver
adrian.klaver@aklaver.com


Re: Casting hstore to json

From
Pawel Veselov
Date:

Adrian,

On Thu, Jan 15, 2015 at 9:09 PM, Adrian Klaver <adrian.klaver@aklaver.com> wrote:
On 01/15/2015 07:59 PM, Pawel Veselov wrote:
Hi.

I'm trying to cast hstore to json, but I don't seem to be getting a json
object from hstore key/value pairs.

 
[skipped]
 
db=> SELECT to_json('"a"=>1, "b"=>2'::hstore);
            to_json
------------------------------
  "\"a\"=>\"1\", \"b\"=>\"2\""

Works here:

business_app=> select version();
                                                           version
-----------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.3.5 on i686-pc-linux-gnu, compiled by gcc (SUSE Linux) 4.8.1 20130909 [gcc-4_8-branch revision 202388], 32-bit
(1 row)


business_app=> SELECT to_json('"a"=>1, "b"=>2'::hstore);
       to_json
----------------------
 {"a": "1", "b": "2"}
(1 row)


Did you upgrade from a previous version of Postgres?

Yes! From 9.1.14. 'alter extension hstore update' did the trick, thank you :)

[skipped]