On Tue, Aug 4, 2015 at 5:19 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Paulo Vieira <paulovieira@gmail.com> writes:
> > On Mon, Aug 3, 2015 at 5:40 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> >> This does not seem like a bug, because the value of the data field is
> >> just abc, and that isn't JSON. You'd need something more like
> >>
> >> input_data json :=3D '{"id": 1, "data": "\"abc\""}';
>
> > I'm confused. In my example the value is <double quotes>abc<double
> quotes>,
> > which is a valid json value (and not simply abc).
>
> No, the value of the field is just abc --- the quotes are JSON syntax
> decoration, they are not part of the represented value. If we do it
> as you seem to have in mind, it would be impossible to deal sanely
> with data values that contain quotes or backslashes.
>
> =E2=80=8B
Paulo,=E2=80=8B
=E2=80=8BConsider what is stored if you define data as type text. The resu=
ltant
value would not include the double-quotes.
The following query fails and for the same reason.
SELECT 'abc'::json
More abstractly:
'{"id": <literal number>, "data": "<literal string>"}'
The value of the <literal string> is what is going to be parsed and so it
must be whatever is needed to make the following pseudo-code succeed.
SELECT <literal string>::json;
=E2=80=8BHTH,
David J.
=E2=80=8B