Re: Getting json-value as varchar

Thomas Markus <t.markus@proventis.net>

From: Thomas Markus <t.markus@proventis.net>
To:
Cc: pgsql-general@lists.postgresql.org
Date: 2022-01-06T13:25:16Z
Lists: pgsql-general
Hi,

Am 06.01.22 um 13:36 schrieb Andreas Joseph Krogh:
> På torsdag 06. januar 2022 kl. 13:31:19, skrev Thomas Markus 
> <t.markus@proventis.net>:
>
>     Hi,
>     Am 06.01.22 um 13:28 schrieb Andreas Joseph Krogh:
>>     Hi, in PG-14 this query returns "value" (with double-quotes):
>>     SELECT ('{"key":"value"}'::jsonb)['key'];
>>     ┌─────────┐
>>     │  jsonb  │
>>     ├─────────┤
>>     │ "value" │
>>     └─────────┘
>>     (1 row)
>>
>>     and this returns 'value' (without the quotes):
>>     SELECT ('{"key":"value"}'::jsonb)->> 'key';
>>     ┌──────────┐
>>     │ ?column? │
>>     ├──────────┤
>>     │ value    │
>>     └──────────┘
>>     (1 row)
>>
>>     How to I use the subscript syntax and get the result as varchar
>>     instead of JSONB, assuming I /know/ the JSON-field is a String?
>     simply cast your value
>     SELECT (('{"key":"value"}'::jsonb)->> 'key')::text;
>
>     best regards
>     Thoma
>
> I think you misread my message. What I want is for the subscript-version:
>> ('{"key":"value"}'::jsonb)['key']
> to return:
> ┌──────────┐
> │ ?column? │
> ├──────────┤
> │ value    │
> └──────────┘
>
> instead of
> ┌─────────┐
> │  jsonb  │
> ├─────────┤
> │ "value" │
> └─────────┘
yeah right :(

complicated but this should do:
SELECT  jsonb_build_array( ('{"key":"value"}'::jsonb)['key'] ) ->> 0;



> --
> *Andreas Joseph Krogh*
> CTO / Partner - Visena AS
> Mobile: +47 909 56 963
> andreas@visena.com
> www.visena.com <https://www.visena.com>
> <https://www.visena.com>