public inbox for [email protected]  
help / color / mirror / Atom feed
From: Laurenz Albe <[email protected]>
To: Phillip Diffley <[email protected]>
To: [email protected]
Subject: Re: Convert JSON value back to postgres representation
Date: Fri, 20 Jun 2025 06:59:41 +0200
Message-ID: <[email protected]> (raw)
In-Reply-To: <CAGAwPgSCTk=HWKtrzf4L+DOdCFDNOZY0Np9go0nsT6wqe6jd=w@mail.gmail.com>
References: <CAGAwPgSCTk=HWKtrzf4L+DOdCFDNOZY0Np9go0nsT6wqe6jd=w@mail.gmail.com>

On Thu, 2025-06-19 at 23:05 +0200, Phillip Diffley wrote:
> Postgres has a to_jsonb function that will convert a value into its jsonb representation.
> I am now trying to turn a json value back into its postgres type. I was hoping there would
> be something like a from_jsonb function that, along with a type hint, could be used as an
> inverse of to_jsonb, like 
> 
> from_jsonb(to_jsonb('{1,2,3}'::int[]) as int[]
> 
> but I do not see a function like this. I was able to convert a json value back to its
> postgres representation using the jsonb_to_record function, as used in the WHERE expression
> below, but I feel like there might be a better way to do this. 
> 
> CREATE TABLE mytable (id int, col1 int[]);
> INSERT INTO mytable VALUES (1, '{1, 2, 3}'), (2, '{3, 4, 5}');
> SELECT * from mytable WHERE col1 = (select col1 from json_to_record('{"col1": [1, 2, 3]}'::JSON) as x(col1 int[]));
> 
> Is there a preferred method for turning a JSON value back to its postgres representation?

I think jsonb_populate_record() is the closest thing to what you envision.
Not quite right, but:

  CREATE TEMP TABLE arr(a integer[]);

  SELECT * FROM jsonb_populate_record(
                   NULL::arr,
                   jsonb_build_object('a', to_jsonb(ARRAY[1, 2, 3]))
                );

      a    
  ═════════
   {1,2,3}
  (1 row)

Yours,
Laurenz Albe






view thread (3+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: Convert JSON value back to postgres representation
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox