public inbox for [email protected]
help / color / mirror / Atom feedFrom: Adrian Klaver <[email protected]>
To: Mark <[email protected]>
To: [email protected]
Subject: Re: Upper / lower case keys in JSON objects
Date: Fri, 25 Jul 2025 08:20:26 -0700
Message-ID: <[email protected]> (raw)
In-Reply-To: <CAAm-KOuSB+mS=k3LjYLCwpkv64EpWqF8OCA=jzwCofnjyqsgXA@mail.gmail.com>
References: <CAAm-KOuSB+mS=k3LjYLCwpkv64EpWqF8OCA=jzwCofnjyqsgXA@mail.gmail.com>
On 7/25/25 05:26, Mark wrote:
> Hi all
>
> Apologies for any unexpected protocol exceptions, I do not post to
> mailing lists very often
>
> I have been trying to work with JSON objects and noticed I could not get
> the function json_to_record to produce results, unless I had the key
> values in lower case, through testing what works.
>
> I completed a search, but could not find any pointer (except for some
> front end comments on labels being all upper or all lower case)
>
> Could anybody comment if the postgres standard is to have key labels in
> lower case?
Yes and no. It comes down to this:
https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
"Quoting an identifier also makes it case-sensitive, whereas unquoted
names are always folded to lower case. For example, the identifiers FOO,
foo, and "foo" are considered the same by PostgreSQL, but "Foo" and
"FOO" are different from these three and each other. (The folding of
unquoted names to lower case in PostgreSQL is incompatible with the SQL
standard, which says that unquoted names should be folded to upper case.
Thus, foo should be equivalent to "FOO" not "foo" according to the
standard. If you want to write portable applications you are advised to
always quote a particular name or never quote it.)"
So on the Postgres(SQL) side 'as x(seclvl int, firbal text, firlvl text
, thilvl text, fourlvl int)' if you want to match the mixed case keys
coming from the JSON object you need to double quote the field names.
The yes is that Postgres by default folds identifiers to lower case, but
no that does not mean you have to use lower case by default for the JSON
keys.
>
> Many thanks for any help you can provide
>
> Mark
>
> query:
> select * from json_to_record('{"secLvl": 13, "firBal": "somethi",
> "firLvl": "C", "thiLvl": "A", "fourLvl": 2}'::json) as x(seclvl int,
> firbal text, firlvl text
> , thilvl text, fourlvl int);
>
> result:
> seclvl | firbal | firlvl | thilvl | fourlvl
> --------+--------+--------+--------+---------
> | | | |
> (1 row)
>
>
> query:
> select * from json_to_record('{"seclvl": 13, "firbal": "somethi",
> "firlvl": "C", "thilvl": "A", "fourlvl": 2}'::json) as x(seclvl int,
> firbal text, firlvl text
> , thilvl text, fourlvl int);
>
> result:
> seclvl | firbal | firlvl | thilvl | fourlvl
> --------+---------+--------+--------+---------
> 13 | somethi | C | A | 2
> (1 row)
>
--
Adrian Klaver
[email protected]
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: Upper / lower case keys in JSON objects
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