This:
select jsonb_pretty(jsonb_build_object(
'a'::varchar, 1.7::numeric,
'b'::varchar, 'dog'::varchar,
'c'::varchar, true::boolean
))
allows me to express what I want. That’s a good thing. Are you saying that this:
select jsonb_pretty(jsonb_object(
'{a, 17, b, "dog", c, true}'::varchar[]
))
simply lacks that power of expression and that every item in the array is
assumed to be intended to end up as a JSON text primitive value? In other
words, do the double quotes around "dog" have no effect? That would be a bad
thing—and it would limit the usefulness of the jsonb_object() function.
The doc (“Builds a JSON object out of a text array.”) is simply too terse to
inform an answer to this question.
On 14-Feb-2020, at 18:28, Vik Fearing <[email protected]> wrote:
On 15/02/2020 03:21, Bryn Llewellyn wrote:
> Now execute this supposed functional equivalent:
>
> select jsonb_pretty(jsonb_object(
> '{a, 17, b, "dog", c, true}'::varchar[]
> ))
>
> It is meant to be a nice alternative when you want to build an object (rather
> than an array) because the syntax is less verbose.
>
> However, it gets the wrong answer, thus:
>
> { +
> "a": "17", +
> "b": "dog",+
> "c": "true"+
> }
>
> Now, the numeric value and the boolean value are double-quoted—in other
> words, they have been implicitly converted to JSON primitive text values.
They haven't been implicitly converted, you gave an array of varchars.
How should it know that you don't want texts?
> Do you agree that this is a bug?
No.
--
Vik Fearing