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 <v...@postgresfriends.org> 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