Subject: Upper / lower case keys in JSON objects

From: Mark <[email-masked]>
Date: Fri, 25 Jul 2025 13:26:16 +0100

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?

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)

---

From: Mark <[email-masked]>
Date: Fri, 25 Jul 2025 13:33:54 +0100

Sorry all,

Figured it out, the following works:

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)

On Fri, Jul 25, 2025 at 1:26 PM Mark <[email-masked]> wrote:

> 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)
>
> select * from json_to_record('{"secLvl": 13, "firBal": "somethi",
> "firLvl": "C", "thiLvl": "A", "fourLvl": 2}'::json) as x(seclvl int, firbal
> text, firlvl text
> select * from json_to_record('{"seclvl": 13, "firbal": "somethi",
> "firlvl": "C", "thilvl": "A", "fourlvl": 2}'::json) as x(seclvl int, firbal
> text, firlvl text